Подтвердить что ты не робот

IIS не распознает аннотации модели представления

У меня есть базовая модель просмотра 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")]
4b9b3361

Ответ 1

MVC3 поддерживает атрибут [StringLength], а [MinLenght] и [MaxLength] - с Entity Framework. Не могли бы вы попробовать это вместо MaxLength?

[StringLength(120, ErrorMessage = "Must be under 120 characters")]  

Ответ 2

В вашем примере у вас есть следующее свойство вашей модели.

[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.

Ответ 3

Я очень новичок в бритве, но я думал, что DisplayTextFor не дал вам ярлыка. Разве @Html.LabelFor() не имеет смысла?

Ответ 4

Я только что протестировал это на IIS7 с .NET 4 App Pool, как и в вашем случае, и он отлично работает для меня. Можете ли вы описать, как вы делаете свое развертывание? Я сделал простой щелчок правой кнопкой мыши > Опубликовать в Visual Studio 2010 с профилем по умолчанию. Также нужно проверить, что версия .NET, установленная на сервере, обновлена. Это должно быть v4.0.30319 или более. Возможно, я мог бы отправить вам электронное письмо, чтобы вы могли проверить его на своем сервере?

Ответ 5

Ответ 2 - Мой первый ответ на самом деле просто указывает на неправильный тип вопроса, но на основе комментариев, которые вы дали о своем развертывании, я думаю, что ваша проблема может быть связана с вашим развертыванием, а не с вашим кодом.

Если вы выполняете развертывание x-copy, убедитесь, что вы копируете все последние библиотеки DLL в каталог bin. Я имею в виду...

  • Убедитесь, что вы создали свое решение, и сборка выполнена успешно.
  • Скопируйте недавно созданные библиотеки DLL на ваш веб-сервер, а также другие файлы.

Причиной этого является то, что модель будет скомпилирована в эти библиотеки DLL, поэтому вам нужно загрузить их в свою папку с живым bin, чтобы получить свои атрибуты на сервере.

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

Ответ 6

Для этого вам нужны сценарии MicrosoftMvcValidation.js, включенные в ваш проект. Вы, возможно, удалили их или запретили копировать?