asp mvc 2 Editor для странного поведения

Хорошо, я определил общий редактор для строки, как показано ниже

<% @ Control Language = "C#" Inherits = "System.Web.Mvc.ViewUserControl"%>
<% = Html.LabelFor (model => model)%>
<% = Html.TextBoxFor (model => model)%>
<% = Html.ValidationMessageFor (model => model)%>

Теперь я вызываю пользовательский редактор, как это в другом элементе управления

        <%= Html.EditorFor(model=>model.Username)%>
        <%= Html.EditorFor(model=>model.Email)%>
        <%= Html.EditorFor(model=>model.Password)%>

моя модель такая

    [Required(ErrorMessage="Le nom d'utilisateur est requis.")]
    [DataType(DataType.Text)]
    [DisplayName("Nom d'utilisateur")]
    public string Username { get; set; }

    [Required(ErrorMessage = "L'email est requis.")]
    [DataType(DataType.EmailAddress)]
    [DisplayName("Courriel")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Le mot de passe est requis.")]
    [ValidatePasswordLength]
    [DataType(DataType.Password)]
    [DisplayName("Mot de passe")]
    public string Password { get; set; }

Единственным отображением, которое отображается, является поле Email. Два других не отображаются? Если я удаляю DataType.Text и DataType.Password, то все поля отображения отображаются??

Очень странное поведение...

Кто-то знает почему?

2 ответа

DataType контролирует, какой тип шаблона используется для визуализации. Когда вы указываете "Текст" или "Пароль", MVC выберет шаблоны по умолчанию для них (они встроены) и проигнорирует ваш шаблон.

Электронная почта работает, потому что нет встроенного шаблона электронной почты, и поэтому она возвращается к строке.

РЕДАКТИРОВАТЬ: Я думаю, что я неправильно понял. Вы говорите, что они вообще не рендерится? У вас есть пустые пароли и текстовые шаблоны в папке EditorTemplates?

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

Это будет работать:

<%= Html.ValidationSummary() %>

Или это:

<%= Html.ValidationMessageFor(model.UserName) %>
<%= Html.ValidationMessageFor(model.Email) %>
<%= Html.ValidationMessageFor(model.Password) %>
Другие вопросы по тегам