Я рассматривал многие идеи проверки ASP.Net MVC на стороне клиента, включая xVal. В данный момент это не обеспечивает ValidationSummary, поэтому я решил сделать AJAX-пост, который просматривает ошибки ModelState и обновляет DIV сообщениями об ошибках в успешном AJAX-посте.
Проблема в том, что ваше 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" />