これValidationSummary
は、サーバー側のエラーが発生した後に表示されるようにページにエラーを追加するものです。ValidationFor
要素はクライアント側のエラーを提供します。
どちらもHTMLヘルパーです。エラーをビューに戻すか、エラーをオーバーライドしてカスタムUI要素を表示する独自の形式を実装する必要があります。
初心者向けのjQueryUIをご覧ください。
真実は、私たち全員が実装するための完全に異なるシナリオを提供する可能性が最も高いということです。しかし、そのすべての重要な要素はjQuery / Ajax/JSONです
たとえば、私にとっては、作成または更新のために投稿する各ビューにjavascript参照を含めます
<script src="@Url.Content("~/Scripts/AjaxFormSubmission.js")" type="text/javascript"></script>
そのスクリプトは次のようになります。
/// <reference path="jquery-1.7.2.js" />
$("document").ready(function () {
$('form').submit(function () {
if ($(this).valid()) {
$.ajax({
url: this.action,
dataType: "json",
cache: false,
type: 'POST',
data: $(this).serialize(),
beforeSubmit: showProgressStarted(),
success: function (result) {
showSuccessError(result);
}
});
}
return false;
});
});
フォームが送信されると、「リクエストが処理されるまでお待ちください...」というメッセージが少しポップアップ表示されdiv
、完了時に非表示になり、JSONの成功またはエラーメッセージが表示されます。
JQueryUI Dialogを使用すると、この種の目標をかなり達成できます。
上記のスクリプトが投稿する私のアクションの1つのサンプルを次に示します。
public JsonResult UpdateRequestStatus(RequestViewModel model) {
try {
AttemptUpdateRequestStatus(model);
return Json(new { Success = true, ResultMessage = "Successfully saved" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex) {
ModelState.AddModelError("", ModelStateErrorUtility.WrapResultMessageForList(ex.Message));
}
// this custom function evaluates my ModelState and strips out all the error messages so that I can send them all back as part of my JSON response
return Json(new { Success = false, ResultMessage = ModelStateErrorUtility.GetModelStateErrors(ModelState) }, JsonRequestBehavior.AllowGet);
}
これは私のカスタムエラーを表示する私のjavascript/jQueryコードです
function showSuccessError(result) {
$('#resultSpan').html('');
var headerText;
if (result.Success) {
headerText = "Action was successful!";
$('#resultSpan').append($("<ul id='successMsg' style='list-style: none;' />").append(result.ResultMessage));
}
else {
headerText = "Ooops! There is an Error";
$('#resultSpan').append($("<ul id='errorMsg' style='list-style: none;' />").append(result.ResultMessage)).addClass("AjaxErrorText").removeClass("AjaxSuccessText");
}
showProgressComplete(headerText);
}
これにより、「お待ちください......」のテキストが実際の成功またはエラーメッセージに変更されます
function showProgressComplete(headerText) {
$('#ajaxResultPopUpHeaderText').html(headerText);
}
私が言ったように、これはただ一人の男の例です。ここにいる全員が、これを異なる方法で実装している可能性があります。本当に好みです。