ValidationSummary для ошибок на стороне сервера не работает

Проверка на стороне клиента и ValidationSummary отлично работают для моего проекта (MVC4 + Razor + Unobtrusive JS), но ошибки на стороне сервера не отображаются в моем представлении, и если была какая-либо ошибка на стороне клиента, она не удаляется из представления (это делает из ModelState). Я пробовал как на Chrome14, так и на IE9.

Ошибки на стороне сервера добавляются в модель как ModelState.AddModelError(string.Empty, ModelState.AllErrors()); и отображаются в представлении как @Html.ValidationSummary(false).

Изменить

Простая отправка формы работает нормально, она показывает несколько сообщений об ошибках, возвращаемых с сервера, и обновляет сообщения об ошибках, но отправка формы на основе ajax не работает, сообщения об ошибках, возвращаемые отправкой формы на основе ajax, вообще не отображаются.

Вот пример демонстрации того, как делается запрос

    @*... View contents related to Master Model  ...*@
    @using (Ajax.BeginForm("ActionToAddRecord", new AjaxOptions()))
    {
        @Html.Action("ActionToAddRecord")
        <input type="submit" value="Add Record"/>
    }
    @*... View contents related to Master Model  ...*@

ActionToAddRecord — это частичное представление, представляющее модель, содержащуюся в основной модели.

Ошибки возвращаются как

[HttpGet]
public ActionResult ActionToAddRecord()
{
    return View();
}

[HttpPost]
public ActionResult ActionToAddRecord(childModel model)
{
    ModelState.AddModelError(string.Empty, "First error message");
    ModelState.AddModelError(string.Empty, "Second error message");
    return View(model);
}

Изменить

Я видел аналогичную функциональность в шаблонном приложении MVC от VS2010, форма журнала на основе диалога. Сообщения об ошибках возвращаются в виде Json, а затем JS используется для их отображения, IMO, похоже, что MS сделала запросы на основе Ajax довольно простыми и лаконичными (Ajax.BeginForm), но отсутствует часть обработки ошибок. Прямо сейчас я не хочу использовать JS для этого, может быть лучший способ автоматически обрабатывать этот тип обработки ошибок.


person bjan    schedule 21.03.2012    source источник


Ответы (1)


Решено, с небольшой ошибкой.

Основной вид

@*Master View Contents*@
        @using (Ajax.BeginForm("AddPaymentCurrency", new AjaxOptions { UpdateTargetId = "paymentCurrency" }))
        {
            <div id="paymentCurrency"> 
                @{Html.RenderPartial("PaymentCurrency", Model.PaymentCurrencyNew);}
            </div>
        }

Просмотр платежной валюты

@*Model Editors*@
@Html.ValidationSummary(false)
<input type="submit" value="Add Payment Currency"/>

<div id="paymentCurrencyList" style="width:inherit; height:auto; overflow:auto;"> 
    @Html.Action("PaymentCurrencyList")
</div>

Контроллер

[HttpPost]
public ActionResult AddPaymentCurrency(PaymentCurrency model)
{
    if (!ModelState.IsValid)
    {
        ModelState.AddModelError(string.Empty, ModelState.AllErrors());
        return View("PaymentCurrency", model);
    }
    //Add login
    return View("PaymentCurrency", model);
}

public ActionResult PaymentCurrencyList()
{
    //var list = getList
    return View(list);
}

небольшая ошибка

ValidationSummary отображается с выделенными полями и звездочкой напротив них при добавлении недопустимой валюты платежа. После добавления действительной валюты ValidationSummary и звездочка больше не отображаются в недопустимой валюте платежа, выделены только поля.

Пожалуйста, помогите мне исправить это, я бы предпочел не менять текущую структуру, иначе я начну получать большую ошибку

person bjan    schedule 27.03.2012