2010-08-23 60 views
2

确定我已经定义为串像以下ASP MVC 2 EditorFor奇怪的行为

<%@控制语言= “C#” 继承= “System.Web.Mvc.ViewUserControl” 共享编辑%>
<%= Html.LabelFor(型号=>模型)%>
<%= Html.TextBoxFor(型号=>模型)%>
<%= Html.ValidationMessageFor(型号=> 模型)% >

现在我打电话像这样的自定义编辑器中的另一个控制

 <%= 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; } 

所呈现的是电子邮件领域唯一的显示。 其他两个不渲染? 如果我删除DataType.Text和DataType.Password然后所有的显示字段被渲染?

很奇怪的行为...

有人知道为什么吗?

+0

你能告诉我为什么你需要数据类型吗? – Stefanvds 2010-08-23 18:22:50

+0

我可以走了,但为什么不呢? – mateo 2010-08-24 14:11:26

回答

0

您需要一个ValidationSummary来显示模型中所有属性的错误。否则,您需要为模型中的每个属性设置一个ValidationMessageFor。

这将工作:

<%= Html.ValidationSummary() %> 

或者这样的:使用什么类型的模板来呈现

<%= Html.ValidationMessageFor(model.UserName) %> 
<%= Html.ValidationMessageFor(model.Email) %> 
<%= Html.ValidationMessageFor(model.Password) %> 
+0

他没有询问验证信息。你怎么知道他的父母看法中没有验证摘要? – 2011-11-29 18:42:24

+0

由于这个问题在3个小时前刚刚更改,我在7个月前回答了这个问题,所以我无法评论混淆。 – 2011-11-29 22:24:59

+0

对不起,没有注意到日期。然而,最近的编辑只是一个重新标记,而不是内容改变的问题。 – 2011-11-29 23:22:53

0

数据类型的控件。当您指定文本或密码时,MVC将为这些模板(它们是内置的)选择默认模板,并忽略您的模板。

电子邮件的工作原理是因为没有内置的电子邮件模板,因此它回退到字符串。

编辑:我想我误解了。你是说他们根本不渲染?您的EditorTemplates文件夹中是否有空白的密码和文本模板?