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) %>