Проверка данных опубликованных форм в рамках ASP.NET MVC - PullRequest
10 голосов
/ 13 августа 2008

Я играл с ASP.NET MVC Framework, и одна вещь, которая меня действительно смущает, это то, как я собираюсь выполнять проверку опубликованных данных формы на стороне сервера. Я предполагаю, что я не отправляю сообщения по тому же URL-адресу, но если я этого не сделаю, как мне повторно отобразить форму с введенными данными и сообщениями об ошибках? Кроме того, куда должна идти логика проверки? В модели или контроллере? Кажется, это одна из немногих областей, где веб-формы намного сильнее (мне не хватает средств проверки).

Ответы [ 6 ]

12 голосов
/ 14 августа 2008

Вот обзор потока в MVC:

  1. / new - визуализировать ваш «новый» вид, содержащий форму для заполнения пользователем
    • Пользователь заполняет форму и публикуется в / create
    • Сообщение направляется в действие Создать на вашем контроллере
    • В вашем методе действия обновите модель данными, которые были опубликованы.
    • Ваша модель должна проверить себя.
    • Ваш контроллер должен прочитать, если модель действительна.
    • Если модель действительна, сохраните ее в своей базе данных. Перенаправьте в / show, чтобы отобразить представление View для вашего объекта.
    • Если модель недействительна, сохраните значения формы и сообщения об ошибках в TempData и снова перенаправьте на действие New. Заполните поля формы данными из TempData и покажите сообщения об ошибках.

Платформы валидации помогут вам в этом процессе. Кроме того, я думаю, что команда ASP.NET MVC планирует среду проверки для следующего предварительного просмотра.

4 голосов
/ 05 сентября 2008

Возможно, вы захотите взглянуть на последний пост ScottGu для ASP.Net prev 5. В нем рассматривается проверочный пример, который очень интересен:

http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

3 голосов
/ 19 сентября 2008

Насколько я могу судить, все все еще пытаются найти "стандартный" способ сделать это. Тем не менее, обязательно посмотрите последние посты Фила Хаака и Скотта Гатри на MVC, и вы найдете интересную информацию о том, как они это сделали. Когда я просто поиграл с этим для себя, я создал ModelBinder для сгенерированного мной класса данных LinqToSql. Вы можете проверить этот пост, чтобы узнать, как собрать базовый ModelBinder:

Связующее для модели ASP.Net MVC

Если в вашем действии, если вы создали ModelBinder «Product», вы просто объявите действие следующим образом:

public ActionResult New (Product product)

И механизм связывания позаботится о присвоении опубликованных данных свойствам объектов, если вы все равно правильно их построите.

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

(ModelStateDictionary_name) .AddModelError ("form_element_id", "enter_value", "error_message");

Затем вы можете просто добавить <% = Html.ValidationSummary ()%> в ваше представление, чтобы отобразить все ваши ошибки.

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

2 голосов
/ 13 августа 2008

Вы смотрели на это? http://www.codeplex.com/MvcValidatorToolkit

Цитируется со страницы

Набор инструментов Validator предоставляет набор валидаторов для нового ASP.NET MVC рамки для проверки HTML-форм на клиент и серверное использование проверочные наборы.

Я боюсь, что кто-то, более опытный в MVC, чем я, должен будет поговорить с тем, где в архитектуре вы должны поместить вещи.

0 голосов
/ 22 августа 2008

В проекте Castle есть модуль Castle.Components.Validator . Это очень ловко и мощно. Он генерирует правила проверки на основе атрибутов модели (или любого другого источника) и даже способен генерировать проверку JS с использованием jQuery, Prototype Validation, fValidate и других. Конечно, разумно абстрагировать валидатор за интерфейс IValidationEngine.

0 голосов
/ 14 августа 2008

Я тоже изучаю фреймворк MVC, так что я не уверен, насколько это не так, но насколько я понимаю, у вас будет форма в представлении, таком как Edit.aspx. Затем эта форма будет отправлять в контроллер другой метод действия, например Update (), передавая содержимое формы, заданной вами в Edit.aspx в качестве параметров.

Update(int id, string name, string foo)

Вы можете выполнить проверку в рамках этого метода. Если все в порядке,

return View("Item", yourObject)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...