[ad_1]
MVC と Razor-Pages を使用して .NET 7 ブログを作成しています。
私のモデルは次のとおりです。
C#
using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Http; namespace MannsBlog.Models { public class ContactFormModel { [Required] [EmailAddress] public string Email { get; set; } = string.Empty; [StringLength(4096, ErrorMessage = "Your message is too long. Please shorten it to max. 4096 chars.")] [MinLength(5)] [Required] public string Body { get; set; } = string.Empty; [Required] [StringLength(100, ErrorMessage = "Name is too long. Just 100 chars allowed.")] public string Name { get; set; } = string.Empty; [Required] [StringLength(150, ErrorMessage = "Subject too long. Just 150 chars allowed.")] public string Subject { get; set; } = string.Empty; public IFormFile? Attachment { get; set; } } }
私が使用しているフォームとして:
HTML
@inject IViewLocalizer _localizer @model MannsBlog.Models.ContactFormModel <form id="myForm" enctype="multipart/form-data" class="form-vertical" asp-controller="Root" asp-action="Contact" method="post"> <div class="form-group"> <input class="e-input" name="Name" type="text" asp-for="Name" placeholder="@_localizer["your-name"]" /> <span asp-validation-for="Name"></span> <input class="e-input" name="Subject" type="text" asp-for="Subject" placeholder="@_localizer["subject"]" /> <span asp-validation-for="Subject"></span> <input class="e-input" name="Email" type="text" asp-for="Email" placeholder="@_localizer["email"]" /> <span asp-validation-for="Email"></span> <ejs-richtexteditor id="Body" showCharCount="true" maxLength="600" value="@Model.Body" locale="@culture"></ejs-richtexteditor> <div id="dateError" style="padding-top: 10px"></div> <span asp-validation-for="Body"></span> <input class="samplebtn e-control e-btn" type="file" asp-for="Attachment" name="@_localizer["attachment"]" multipart /> </div> <div style="text-align: center"> <button id="validateSubmit" class="samplebtn e-control e-btn" type="submit" value="Send" data-ripple="true">@_localizer["submit"]</button> <button id="resetbtn" class="samplebtn e-control e-btn" type="reset" data-ripple="true">Reset</button> </div> </form>
モデル内の参照をマークするために asp-for=”Attachment” を使用しています。
私のコントローラーには「連絡先」メソッドがあります:
C#
[HttpGet("contact")] public IActionResult Contact() { var contactModel = new ContactFormModel(); return View(contactModel); } [HttpPost("contact")] [ValidateAntiForgeryToken] // [ValidateReCaptcha] public async Task<IActionResult> Contact(ContactFormModel model) { try { if (ModelState.IsValid) { if (model.Attachment.Length > 0) { if (await _mailService.SendMailAsync("ContactTemplate.txt", model.Name, model.Email, model.Subject, model.Body, model.Attachment)) { return View("Views/Root/EmailSent"); } } else { if (await _mailService.SendMailAsync("ContactTemplate.txt", model.Name, model.Email, model.Subject, model.Body)) { return View("Views/Root/EmailSent"); } } } } catch (Exception ex) { _logger.LogError("Failed to send email from contact page", ex); return BadRequest(new { Reason = "Error Occurred" }); } return BadRequest(new { Reason = "Failed to send email..." }); }
コントローラーでの最初の試行でブレークポイントを設定しました。 メッセージを追加して添付ファイルを追加し、送信ボタンを使用すると、ブレークポイントに移動します。 モデルを見ていると、メール、本文、名前、件名が入力されていることがわかります。 しかし、添付ファイルには「null」しか表示されていません。
多分私は何かを逃した?
私が試したこと:
記事内を検索しました。 しかし、私が見つけたほとんどは、従来の ASP.NET MVC に関するものでした。 Blazor を使用したフォームに関するドキュメントをいくつか見つけました (使用した .cshtml ファイルの代わりに Razor 構文を使用した .razor ファイル)。
最後に、MS Learnでドキュメントを見つけました ファイルを ASP.NET Core にアップロードする | マイクロソフト ラーン[^]
最初の例は私のようなものです。
解決策 1
簡単なGoogle検索を行いました: c# mvc フォーム ファイルの例 – Google 検索[^]
この受け入れられた解決策を見つけました: MVC: ファイル アップロードと他のフォーム フィールドを 1 つのアクションに投稿する方法 [solved] – スタックオーバーフロー[^]
[ad_2]
コメント