Ответ 1
MVC3 поддерживает атрибут [StringLength], а [MinLenght] и [MaxLength] - с Entity Framework. Не могли бы вы попробовать это вместо MaxLength?
[StringLength(120, ErrorMessage = "Must be under 120 characters")]
У меня есть базовая модель просмотра MVC с аннотациями, например:
[Required(ErrorMessage="Your Name Required")]
[Display(Name = "Your Name")]
[DataType(DataType.Text)]
[MaxLength(120, ErrorMessage = "Must be under 120 characters")]
public String YourName { get; set; }
У меня есть строго типизированное представление, основанное на этой модели представления. Когда я запускаю приложение локально, следующий код генерирует метку "Ваше имя":
@Html.LabelFor(model => model.YourName)
Когда приложение развертывается в IIS7 с пулом приложений .NET 4, ярлык говорит "YourName" (без пробела).
Это очень опасно, и я раньше этого не встречал. Кто-нибудь знает, что может быть причиной этого?
Кэш очищается, это было проверено с помощью нескольких веб-клиентов, и результат тот же.
Edit:
@model MVC.Web.Models.ContactUsModel
<div>
@Html.LabelFor(model => model.YourName)
@Html.EditorFor(model => model.YourName)
</div>
Изменить 2 Все аннотации в этом поле игнорируются. Существуют и другие поля типа текста, и они имеют одинаковую проблему. Это происходит только на реальном сервере. Live-сервер - это IIS 7, который был настроен на Plesk 10.2. Интересно, является ли это ошибкой, поскольку я использую RTM MVC 3.
Изменить 3 В той же модели представления у меня есть свойство Email:
[Required(ErrorMessage = "Your Email Is Required")]
[Display(Name = "Your Email")]
[RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Your Email Is Invalid")]
[DataType(DataType.Text)]
public String FromEmail { get; set; }
Это свойство используется в представлении:
<div>
@Html.LabelFor(model => model.FromEmail)
@Html.EditorFor(model => model.FromEmail)
</div>
Но он отлично работает:( Таким образом, свойство электронной почты отлично работает как в среде live, так и в среде dev. Другие свойства работают только в среде dev.
Изменить 4 Исправлена проблема удаления аннотаций MaxLength и MinLength. Я все равно хотел бы использовать аннотации MaxLength и MinLength как часть моих подпрограмм проверки модели.
[MinLength(3, ErrorMessage = "Minimum 3 Characters")]
[MaxLength(30, ErrorMessage = "Maximum 30 Characters")]
MVC3 поддерживает атрибут [StringLength], а [MinLenght] и [MaxLength] - с Entity Framework. Не могли бы вы попробовать это вместо MaxLength?
[StringLength(120, ErrorMessage = "Must be under 120 characters")]
В вашем примере у вас есть следующее свойство вашей модели.
[Required(ErrorMessage="Your Name Required")]
[Display(Name = "Your Name")]
[DataType(DataType.Text)]
[MaxLength(120, ErrorMessage = "Must be under 120 characters")]
public String YourName { get; set; }
Итак, свойство "YourName" должно получить метку "Ваше имя".
По вашему мнению, вы не показываете свойство YourName.
@Html.LabelFor(model => model.FromName)
@Html.EditorFor(model => model.FromName)
Итак, вам нужно добавить похожие атрибуты в свой свойство FromName.
Я очень новичок в бритве, но я думал, что DisplayTextFor не дал вам ярлыка.
Разве @Html.LabelFor()
не имеет смысла?
Я только что протестировал это на IIS7 с .NET 4 App Pool, как и в вашем случае, и он отлично работает для меня. Можете ли вы описать, как вы делаете свое развертывание? Я сделал простой щелчок правой кнопкой мыши > Опубликовать в Visual Studio 2010 с профилем по умолчанию. Также нужно проверить, что версия .NET, установленная на сервере, обновлена. Это должно быть v4.0.30319 или более. Возможно, я мог бы отправить вам электронное письмо, чтобы вы могли проверить его на своем сервере?
Ответ 2 - Мой первый ответ на самом деле просто указывает на неправильный тип вопроса, но на основе комментариев, которые вы дали о своем развертывании, я думаю, что ваша проблема может быть связана с вашим развертыванием, а не с вашим кодом.
Если вы выполняете развертывание x-copy, убедитесь, что вы копируете все последние библиотеки DLL в каталог bin. Я имею в виду...
Причиной этого является то, что модель будет скомпилирована в эти библиотеки DLL, поэтому вам нужно загрузить их в свою папку с живым bin, чтобы получить свои атрибуты на сервере.
Если вы загружаете файлы кода модели, они фактически не используются на сервере... просто обычная загрузка, просмотр, сценарии и папки содержимого.
Для этого вам нужны сценарии MicrosoftMvcValidation.js, включенные в ваш проект. Вы, возможно, удалили их или запретили копировать?