Проверка Полей Datetime При Переносе Проекта Из Asp.net Mvc 3 В Asp.net Mvc 4



Описание Недавно я решил попробовать новую версию платформы ASP.NET MVC 4 и перенес проект с MVC 3 на MVC 4. И тут неожиданно, ни с того ни с сего, возникли проблемы (хотя кого я шучу, переход на бета-версию всегда означает некоторый риск) с проверкой на стороне клиента таких полей, как Datetime. Внезапно представление отказалось проверять такие поля, хотя раньше они это проходили, учитывая тот факт, что настройки сервера и культуры представления остались прежними.



Ищем проблему

Некоторое время спустя, после того как я от истерики вырвал все волосы на голове и замучил этой проблемой своих коллег по работе, я обнаружил, что MVC 3 и MVC 4 используют разные версии Razor View Engine, в которых выполнялся помощник EditorFor иначе.

Вот пример кода использования:

@Html.EditorFor(model => model.Birthdate)

В результате для Razor второй версии из MVC 4 вход создавался с атрибутом data_val=true, а для MVC 3 такой атрибут просто отсутствовал, что означало отсутствие валидации на стороне клиента.



Решение

Думаю, проблему можно решить двумя способами:
  • Изменение jquery.validation.js, встроенного в проект по умолчанию, но это, мягко говоря, не очень хороший способ
  • Создание собственного помощника, создающего входные данные без этого атрибута.

Вот пример такого помощника, так сказать на скорую руку:

public static class DatetimeHelpers { public static IHtmlString Date(this HtmlHelper helper, string name, object value) { return Date(helper, name, value, null); } public static IHtmlString Date(this HtmlHelper helper, string name, object value, object htmlAttributes) { var tagBuilder = new TagBuilder("input"); tagBuilder.Attributes["name"] = name; tagBuilder.Attributes["value"] = value.ToString(); tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); return MvcHtmlString.Create(tagBuilder.ToString()); } }

Вот пример использования:

@Html.Date("Birthdate", Model.Birthdate, new { id = "Birthdate" })

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

Спасибо за внимание.

Теги: #asp.net mvc 4 #проверка #datetime #razor #разработка веб-сайтов #.

NET

Вместе с данным постом часто просматривают: