Проверка опубликованных данных формы в платформе ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/10300

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Возможно, вам захочется взглянуть на последний пост СкоттГу для ASP.Net, предыдущая версия 5.Он проходит через очень интересный образец проверки:

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

Другие советы

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

  1. /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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top