Проверка опубликованных данных формы в платформе ASP.NET MVC
-
08-06-2019 - |
Вопрос
Я экспериментировал с ASP.NET MVC Framework, и единственное, что меня действительно смущает, это то, как я должен выполнять проверку данных опубликованной формы на стороне сервера.Я предполагаю, что не отправляю ответ на тот же URL-адрес, но если нет, то как мне повторно отобразить форму с введенными данными и сообщениями об ошибках?Кроме того, куда должна идти логика проверки?В модели или контроллере?Кажется, это одна из немногих областей, где веб-формы намного мощнее (мне не хватает элементов управления проверкой).
Решение
Возможно, вам захочется взглянуть на последний пост СкоттГу для ASP.Net, предыдущая версия 5.Он проходит через очень интересный образец проверки:
Другие советы
Вот обзор потока в MVC:
- /new — визуализировать «Новое» представление, содержащее форму для заполнения пользователем.
- Пользователь заполняет форму, и она публикуется в /create.
- Публикация перенаправляется на действие «Создать» на вашем контроллере.
- В своем методе действия обновите модель опубликованными данными.
- Ваша модель должна подтвердить себя.
- Ваш контроллер должен прочитать, действительна ли модель.
- Если модель действительна, сохраните ее в своей базе данных.Перенаправьте на /show, чтобы отобразить представление для вашего объекта.
- Если модель недействительна, сохраните значения формы и сообщения об ошибках в TempData и снова перенаправьте к действию Создать.Заполните поля формы данными из TempData и покажите сообщения об ошибках.
Платформы проверки помогут вам в этом процессе.Кроме того, я думаю, что команда ASP.NET MVC планирует создать среду проверки для следующей предварительной версии.
Насколько я могу судить, все все еще пытаются найти «стандартный» способ сделать это.Тем не менее, обязательно ознакомьтесь с последними сообщениями Фила Хаака и Скотта Гатри о MVC, и вы найдете интересную информацию о том, как они это сделали.Когда я просто экспериментировал с этим для себя, я создал ModelBinder для сгенерированного мной класса данных LinqToSql.Вы можете прочитать этот пост, чтобы узнать, как собрать базовый ModelBinder:
Связующее устройство модели ASP.Net MVC
В своем действии, если бы вы создали ModelBinder «Продукт», вы бы просто объявили действие следующим образом:
public ActionResult New (продукт продукта)
И связыватель модели позаботится о назначении опубликованных данных свойствам объектов, если вы все равно правильно их построили.
После этого в вашем методе GetValue() вы можете реализовать любую проверку, какую захотите, используя ли исключение, регулярное выражение или что-то еще, что вы можете сделать, например:
(ModelStateDictionary_name).AddModelError("form_element_id", "entered_value", "error_message");
Затем вы можете просто добавить <%= Html.ValidationSummary() %> в свое представление, чтобы отобразить все ваши ошибки.
Для проверки на стороне клиента я просто использовал jQuery.После того, как вы получите базовый образец настройки, вы можете начать делать некоторые интересные вещи, комбинируя все это с частичными представлениями и вызовами Ajax.
Вы взглянули на это?http://www.codeplex.com/MvcValidatorToolkit
Цитата со страницы
Validator Toolkit предоставляет набор валидаторов для новой структуры ASP.NET MVC для проверки форм HTML на стороне клиента и на стороне сервера с использованием наборов валидации.
Боюсь, что кому-то, более разбирающемуся в MVC, чем мне, придется поговорить о том, где в архитектуре следует что-то разместить.
Я тоже только изучаю структуру MVC, поэтому не уверен, насколько это так, но, насколько я понимаю, у вас будет форма в представлении, такая как Edit.aspx.Затем эта форма отправит контроллеру другой метод действия, например Update(), передав содержимое формы, которое вы установили в Edit.aspx в качестве параметров.
Update(int id, string name, string foo)
Вы можете выполнить проверку внутри этого метода.Если все в порядке,
return View("Item", yourObject)
Есть Замок.Компоненты.Валидатор модуль в проекте Castle.Он очень маневренный и мощный.Он генерирует правила проверки на основе атрибутов модели (или любого другого источника) и даже может генерировать проверку JS с использованием jQuery, проверки прототипа, fValidate и других.Конечно, разумно абстрагировать валидатор за интерфейсом IValidationEngine.