我一直在研究许多 ASP.Net MVC 客户端验证想法,包括 xVal。这目前不提供 ValidationSummary,所以我选择做一个 AJAX 帖子,它遍历 ModelState 错误并使用成功的 AJAX 帖子上的错误消息更新 DIV。
问题是您的 ValidationMessage * 字段旁边不会被填充。我想出了一个我还没有测试过的替代想法,因为我还不知道让它工作的完整语法,但我想我会看看你们的想法。
我认为可能存在的一个问题是,当您发布到控制器中的 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" />