ValidationSummary для ошибок на стороне сервера не работает - PullRequest
1 голос
/ 21 марта 2012

На стороне клиента Validation and 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, возможно, есть лучший способ автоматически обработать этот тип ошибок.

1 Ответ

0 голосов
/ 27 марта 2012

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

Master View

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

PaymentCurrency View

@*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 и звездочка больше не отображаются в недопустимой валюте платежа, только поля подсвечиваются.

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

...