xVal を含む多くの ASP.Net MVC クライアント側検証のアイデアを見てきました。これは現時点では ValidationSummary を提供しないため、ModelState エラーをループし、成功した AJAX 投稿のエラー メッセージで DIV を更新する AJAX 投稿を行うことにしました。
これに関する問題は、フィールドの横にある ValidationMessage * が入力されないことです。私はまだテストしていない別のアイデアを思いつきましたが、それを機能させるための完全な構文はまだわかっていませんが、皆さんの考えを見てみたいと思いました。
問題になる可能性があると思われる 1 つの問題は、コントローラーの Edit/Create Action メソッドに投稿し、JSON オブジェクトを返したい場合、JSON は GET アクションにのみ使用されるため、それが合法かどうかわからないことです。
良いアイデアだと思い、助けたいと思っている場合は、これを機能させるための回答とコードスニペットを残してください。それが非常に頭の良い計画であり、もっとうまくできると思う場合は、どうすればよいか教えてください.
コントローラ:
if (!ModelState.IsValid)
{
var err = ModelState.Where(f => f.Value.Errors.Count > 0);
if (Request.IsAjaxRequest())
{
return this.Json(err);
}
else
{
return View(PostedItem);
}
}
意見:
$(function() {
$('#createForm').ajaxForm({
success:fillSummary
});
//click events
$('#btnSave').click( function(){
$('#createForm').submit();
});
function fillSummary(data)
{
//Loop through the modelstate errors returned
$.each(data)
{
//Append Summary DIV with error message
//Look for span with the ModelState key name and set it to visible
}
}
<div id="summary">
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.")%>
</div>
<form action="<%=Url.Action("Create") %>" method="post" id="createForm">
<fieldset>
<div>
<label for="Title">Title:</label>
<%= Html.TextBox("Title",Model.Title) %>
<%= Html.ValidationMessage("Title", "*") %>
<span id="val_Title" style="display:none">*</span>
</div>
</form>
<input type="button" value="Save" id="btnSave" />