
前提・実現したいこと
asp.net coreで掲示板の開発をしております。
フォームに必須入力を設定したく未入力の場合にエラーメッセージを表示したいです。
発生している問題・エラーメッセージ
Required属性を付与し、検証は正しく動作しているのですがエラーメッセージが表示されません。
#補足情報
言語:C#
フレームワーク:.net core 3.1
ツール:Visual Studio2019 Community
開発環境のOS windows10
visual studioテンプレート ASP.NET core Web アプリ(Model-View-Controller)
Model namespace board.Models { public class BoardData { public int BoardDataId { get; set; } [Column(TypeName = "varchar(100)")] [Required(ErrorMessage = "{0}は必須です。")] [Display(Name = "名前")] public string view_Name { get; set; } [Required(ErrorMessage = "{0}は必須です。")] [Display(Name = "メッセージ")] public string text { get; set; } public DateTime post_date { get; set; } } }
Model namespace board.Models { public class DateModelView { public BoardData BoardData { set; get; } public IEnumerable<BoardData> boardDatas { get; set; } } }
view @model board.Models.DateModelView @{ ViewData["Title"] = "Index"; var succes = TempData["succes"]; var error = TempData["error"]; } <h1>Index</h1> <p>@succes</p> <p> <a asp-action="Create">Create New</a> </p> <form asp-action="Create"> <div> <label asp-for="BoardData.view_Name">表示名</label> <input asp-for="BoardData.view_Name" type="text" name="view_Name" value="" /> <span asp-validation-for="BoardData.view_Name" class="text-danger"></span> </div> <div> <label asp-for="BoardData.text">一言メッセージ</label> <textarea asp-for="BoardData.text" name="text"></textarea> <span asp-validation-for="BoardData.view_Name" class="text-danger"></span> </div> <input type="submit" name="btn_submit" value="書き込む"> </form> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.BoardData.view_Name) </th> <th> @Html.DisplayNameFor(model => model.BoardData.text) </th> <th> @Html.DisplayNameFor(model => model.BoardData.post_date) </th> </tr> </thead> <tbody> @foreach (var item in Model.boardDatas) { <tr> <td> @Html.DisplayFor(modelItem => item.view_Name) </td> <td> @Html.DisplayFor(modelItem => item.text) </td> <td> @Html.DisplayFor(modelItem => item.post_date) </td> <td> <a asp-action="Edit" asp-route-id="@item.BoardDataId">Edit</a> | <a asp-action="Details" asp-route-id="@item.BoardDataId">Details</a> | <a asp-action="Delete" asp-route-id="@item.BoardDataId">Delete</a> </td> </tr> } </tbody> </table>
Controller public IActionResult Create() { TempData["succes"] = ""; TempData["error"] = ""; return View(); } // POST: BoardDatas/Create // To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see http://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create([Bind("BoardDataId,view_Name,text")] BoardData boardData) { if (ModelState.IsValid) { _context.Entry(boardData).Property("post_date").CurrentValue = DateTime.Now; _context.Add(boardData); await _context.SaveChangesAsync(); TempData["succes"] = "メッセージを書き込みました。"; return RedirectToAction(nameof(Index)); } return View("Index", dateModelView); }








回答1件
あなたの回答
tips
プレビュー