Я столкнулся с той же проблемой и решил ее следующим образом. У меня есть список. Из этого списка я вызываю New, Update, Delete формы в диалоге пользовательского интерфейса. Успешное закрытие диалогового окна и возврат к списку и обновлению пользовательского интерфейса. Ошибка покажет сообщение проверки и диалог останется прежним. Причина в том, что AjaxForm публикует сообщения несколько раз при каждом нажатии.
Решение:
//Link click from the list -
$(document).ready(function () {
$("#lnkNewUser").live("click", function (e) {
e.preventDefault();
$('#dialog').empty();
$('#dialog').dialog({
modal: true,
resizable: false,
height: 600,
width: 800,
}).load(this.href, function () {
$('#dialog').dialog('open');
});
});
//Form submit -
$('#frmNewUser').live('submit', function (e) {
e.preventDefault();
$.ajax({
url: this.action,
type: this.method,
data: $('#frmNewUser').serialize(),
success: function (result)
{
debugger;
if (result == 'success') {
$('#dialog').dialog('close');
$('#dialog').empty();
document.location.assign('@Url.Action("Index", "MyList")');
}
else {
$('#dialog').html(result);
}
}
});
return false;
});
Сценарии должны быть в интерфейсе списка. Не в частичных представлениях (новый, обновление, удаление)
//Partial View -
@model User
@Scripts.Render("~/bundles/jqueryval")
@using (Html.BeginForm("Create", "Test1", FormMethod.Post, new { id = "frmNewUser", @class = "form-horizontal" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.UserID)
<p>@Html.ValidationMessage("errorMsg")</p>
...
}
//Do not use Ajax.BeginForm
//Controller -
[HttpPost]
public ActionResult Create(User user)
{
if (ModelState.IsValid)
{
try
{
user.CreatedDate = DateTime.Now;
user.CreatedBy = User.Identity.Name;
string result = new UserRepository().CreateUser(user);
if (result != "")
{
throw new Exception(result);
}
return Content("succes");
}
catch (Exception ex)
{
ModelState.AddModelError("errorMsg", ex.Message);
}
}
else
{
ModelState.AddModelError("errorMsg", "Validation errors");
}
return PartialView("_Create", user);
}
Надеюсь, кто-то получит помощь от этого. Спасибо всем за вклад.
Кредит http://forums.asp.net/t/1649162.aspx