ASP.NET MVC 4 で作業していますが、モデルの検証が正しく機能しないという問題があります。何らかの理由で、すべての必須フィールドに入力する必要があるわけではありません。
これが私のモデルです:
public class MovieModel
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public DateTime ReleaseDate { get; set; }
[Required]
public string Genre { get; set; }
[Required]
public decimal Price { get; set; }
public virtual ICollection<RoleInMovie> RoleInMovie { get; set; }
}
ビューは次のとおりです。
@using (Html.BeginForm())
{
<table>
<tr>
<td>
<label>Name:</label></td>
<td>@Html.EditorFor(m => m.Name)</td>
<td>@Html.ValidationMessageFor(m => m.Name)</td>
</tr>
<tr>
<td>
<label>Genre:</label></td>
<td>@Html.EditorFor(m => m.Genre)</td>
<td>@Html.ValidationMessageFor(m => m.Genre)</td>
</tr>
<tr>
<td>
<label>Price:</label></td>
<td>@Html.EditorFor(m => m.Price)</td>
<td>@Html.ValidationMessageFor(m => m.Price)</td>
</tr>
</table>
<button type="submit">Submit</button>
}
そして、ここに私の行動があります:
[HttpPost]
public ActionResult Add(MovieModel model)
{
if(ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View();
}
価格だけを入力するとすぐに、modelstate.isvalid が true になります。モデルにカーソルを合わせると、名前とジャンルの両方が null であると表示されます。もちろんそれらは必須ですが、検証は機能しません。また、validationmessagefor は価格でのみ機能します。
あまりにもばかげたものを見落としていないことを願っています。助けてくれてありがとう!