これを行うには、ここで概説したアプローチに従っています。
xval を使用したドロップダウン選択の検証に問題があります。MVC バインディングは、操作が検証に合格することを許可する間違ったことを推測しているようですが、モデル状態はバインディング例外を保存し、ページを無効にします。無効なデータで実行することは許可されていますが、ページが無効であるため、ユーザーは検証が失敗したと信じるようになります。
これで分かりやすくなるかも
これは私のドロップダウンです。ユーザーが何もしなかったと仮定して、「選択してください」が選択されています。
Do you like cheese:
<select name="Favourites.Cheese">
<option>Please Select</option>
<option value="1">Yes</option>
<option value="0">No</option>
</select>
<%=Html.ValidationMessage("Favourites.Cheese")%>
これは投稿からのコントローラ アクションでもあり、MVC は値 false を fav.cheese にマップします。
public ActionResult Create(Favourites fav)
{
try
{
_favTask.Create(fav);
}
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "Favourites");
}
if(!ModelState.IsValid)
{
//redirect back
}
//other stuff
}
プロパティが帰属されました
pulic class Favourites
{
[Required]
public bool Cheese{get;set;}
}
fav.cheese に値があるため、例外はスローされません
public int Create(Favourites fav)
{
var errors = DataAnnotationsValidationRunner.GetErrors(fav);
if (errors.Any())
throw new RulesException(errors);
//create fav
}
しかし、フォーカスがコントローラに戻ると、ModelState.Isvalid が false になるため、from がメッセージとともにリロードされます。値 'Please Select' は無効です。これを停止するにはどうすればよいですか?また、「値を選択してください」という xVal 駆動の検証方法をどのようにすればよいですか?