我一直在寻找许多ASP.Net MVC客户端验证的想法,包括xVal。目前这还没有提供ValidationSummary,因此我选择了AJAX帖子,它通过ModelState错误循环,并在成功的AJAX帖子上用错误消息更新DIV。AJAX验证的想法 - 完成ValidationSummary&ValidationMessage
问题在于您的ValidationMessage *旁边的字段不会被填充。我想出了一个我还没有测试过的替代想法,因为我不知道完整的语法来让它工作,但我想我会看到你们的想法。
我认为可能是一个问题的一个问题是,当您发布到控制器中的编辑/创建操作方法并且您想要返回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" />
如果没有错误什么是MessageBox.ShowMessage - 是不是Windows窗体?如果服务器端没有错误,我假设你继续进行Controller操作并将数据添加到数据库中?有错误时你只返回JSON吗?虽然看起来很好! – Jon 2009-05-21 14:01:09