Как передать ошибки JavaScript из действия в мое представление? - PullRequest
1 голос
/ 29 июня 2009

У меня есть 2 действия, одно для GET, а другое обрабатывает POST-запросы.

Хотя у меня есть проверка на стороне клиента, есть некоторые вещи, которые я проверяю и на стороне сервера (в моем методе действия).

В действии POST, когда я нахожу ошибки и т. Д., О которых я хочу сообщить обратно в пользовательский интерфейс, какие варианты у меня есть для отправки сообщений / ошибок на стороне клиента?


Примечание:

Я использую популярный плагин проверки jQuery.

Ответы [ 2 ]

1 голос
/ 29 июня 2009

Некоторые правила, которые я соблюдаю при реализации проверки в веб-приложениях / сайтах:

  • Проверка должна происходить на стороне клиента и на стороне сервера
  • Проверка на стороне сервера должна отражать проверку на стороне клиента для пользователей с отключенными сценариями
  • Хотя правила проверки применяются в двух местах, логика не должна дублироваться

Следуя этим правилам, я использую следующее решение:

  • xVal (найден в блоге Скотту)
  • Решение IDataError от Адама Schroder
  • Бизнес-правила реализованы в модели с аннотациями данных
  • Служба может выдавать пользовательские исключения для уникальных бизнес-ограничений

Удивительно, как легко это использовать и как хорошо это работает. Он использует плагин проверки JQuery прозрачно и делает то, что должен, с минимальным кодированием.

Проверка клиента на ваш взгляд состоит из:

<%= Html.ClientSideValidation<Foo>() %>

Проверка на стороне сервера в вашем действии состоит из

ModelState.IsValid
1 голос
/ 29 июня 2009

Если вы используете привязку модели из своего представления к действию публикации, она имеет встроенную проверку, которая может использоваться для этого.

Однако некоторые люди предпочитают проводить проверку вне Модели. Чтобы вернуть эти ошибки обратно в представление, необходимо обновить ModelState, а затем выполнить обычную проверку, если она действительна (содержит ошибки):

    public Dictionary<string, string> ValidateEntry(Object obj)
    {
        var errors = new Dictionary<string, string>();

        if (string.IsNullOrEmpty(obj.Owner))
        {
            errors.Add("Owner", "You must select Owned By.");
        }
        //... whatever else
        return errors;
    }

     [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(Object cap)
    {
       var errors = ValidateEntry(cap);
        if (errors.Count > 0)
        {
            foreach (var err in errors)
            {
                ModelState.AddModelError(err.Key, err.Value);
            }
        }
        if (ModelState.IsValid)
        {
           //... do if valid
        }
        return View(ViewModel);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...