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





Вы смотрели на это? 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, чем я, придется поговорить о том, где в архитектуре вы должны что-то размещать.
Я тоже только изучаю структуру MVC, поэтому я не уверен, насколько это не так, но, насколько я понимаю, у вас будет форма в представлении, такая как Edit.aspx. Эта форма затем отправит в контроллер другой метод действия, такой как Update (), передав содержимое формы, которую вы установили в Edit.aspx в качестве параметров.
Update(int id, string name, string foo)
Вы можете выполнить проверку в этом методе. Если все в порядке,
return View("Item", yourObject)
Вот обзор потока в MVC:
Фреймворки валидации помогут вам в этом процессе. Кроме того, я думаю, что команда ASP.NET MVC планирует структуру проверки для следующей предварительной версии.
Отличное резюме! Будет здорово с примером
Хорошее резюме! Единственная проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность проверить тип данных, и я не могу сделать это до передачи данных формы в модель, поскольку при ее создании будут возникать исключения. Есть ли хороший способ обойти это?
TryUpdateModel () возьмет данные вашей формы и попытается поместить их в ваш объект. Просто используйте FormData как параметр для вашего контроллера, а не как тип объекта. Другой вариант - создать подшивку пользовательской модели. Подробнее здесь: hanselman.com/blog/…
Лэнс, ведро TempData относится к этому запросу? Очевидно, что это создало бы проблемы, если бы он был основан на сеансе и несколько запросов пытались сохранить данные в одном сегменте. Кроме того, является ли использование TempData взломом? Так ли решают проблему другие фреймворки MVC?
В проекте Castle есть модуль Castle.Components.Validator. Он очень маневренный и мощный. Он генерирует правила проверки на основе атрибутов модели (или любого другого источника) и даже может генерировать проверку JS с помощью jQuery, Prototype Validation, fValidate и других. Конечно, разумно абстрагироваться от валидатора за интерфейсом IValidationEngine.
Возможно, вы захотите взглянуть на последнюю публикацию ScottGu для ASP.Net prev 5. В нем рассматривается очень интересный образец проверки:
Насколько я могу судить, все до сих пор пытаются придумать «стандартный» способ сделать это. Тем не менее, обязательно ознакомьтесь с последними сообщениями Фила Хаака и Скотта Гатри о 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.
Я посмотрел на проект CodePlex, но то, что я увидел (в то время), меня не впечатлило. Может, сейчас лучше. Я посмотрю еще раз. Очевидно, Джефф и его команда должны проверять данные формы в StackOverflow. Когда я смотрю HTML-код страницы Задайте вопрос, похоже, что страница отправляется сама себе. Интересно, как они проводят валидацию.