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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
0
5 860
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

The Validator Toolkit provides a set of validators for the new ASP.NET MVC framework to validate HTML forms on the client and server-side using validation sets.

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

Я посмотрел на проект CodePlex, но то, что я увидел (в то время), меня не впечатлило. Может, сейчас лучше. Я посмотрю еще раз. Очевидно, Джефф и его команда должны проверять данные формы в StackOverflow. Когда я смотрю HTML-код страницы Задайте вопрос, похоже, что страница отправляется сама себе. Интересно, как они проводят валидацию.

Ben Mills 14.08.2008 00:15

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

Update(int id, string name, string foo)

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

return View("Item", yourObject)

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

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

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

Отличное резюме! Будет здорово с примером

Cherian 09.04.2009 08:10

Хорошее резюме! Единственная проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность проверить тип данных, и я не могу сделать это до передачи данных формы в модель, поскольку при ее создании будут возникать исключения. Есть ли хороший способ обойти это?

bobwah 19.04.2009 15:07

TryUpdateModel () возьмет данные вашей формы и попытается поместить их в ваш объект. Просто используйте FormData как параметр для вашего контроллера, а не как тип объекта. Другой вариант - создать подшивку пользовательской модели. Подробнее здесь: hanselman.com/blog/…

Lance Fisher 20.04.2009 22:46

Лэнс, ведро TempData относится к этому запросу? Очевидно, что это создало бы проблемы, если бы он был основан на сеансе и несколько запросов пытались сохранить данные в одном сегменте. Кроме того, является ли использование TempData взломом? Так ли решают проблему другие фреймворки MVC?

Ben Mills 15.08.2008 21:07

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

Ответ принят как подходящий

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

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

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

Связыватель модели ASP.Net MVC

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

public ActionResult New (продукт)

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

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

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

Затем вы можете просто добавить в представление, чтобы отобразить все свои ошибки.

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

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