16 c# asp.net data-annotations asp.net-mvc-3
我有一个带注释的基本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; }
Run Code Online (Sandbox Code Playgroud)
我有一个基于此视图模型的强类型视图.当我在本地运行应用程序时,以下代码生成"您的名称"标签:
@Html.LabelFor(model => model.YourName)
Run Code Online (Sandbox Code Playgroud)
当应用程序部署在带有.NET 4应用程序池的IIS7上时,标签显示"YourName"(没有空格).
这非常古怪,我以前没遇到过这个.有没有人知道可能导致这种情况的原因是什么?
清除缓存,已经从一系列Web客户端测试,结果是相同的.
编辑:
@model MVC.Web.Models.ContactUsModel
<div>
@Html.LabelFor(model => model.YourName)
@Html.EditorFor(model => model.YourName)
</div>
Run Code Online (Sandbox Code Playgroud)
编辑2 正在忽略该字段上的所有注释.还有其他文本类型字段,它们具有相同的问题.这只发生在实时服务器上.实时服务器是IIS 7,已在Plesk 10.2上配置.想知道这是不是因为我使用的是MVC 3 RTM.
编辑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; }
Run Code Online (Sandbox Code Playgroud)
在视图中使用此属性:
<div>
@Html.LabelFor(model => model.FromEmail)
@Html.EditorFor(model => model.FromEmail)
</div>
Run Code Online (Sandbox Code Playgroud)
但它完全正常:(因此,电子邮件属性在live和dev环境中都能正常工作.其他属性只能在dev环境中工作.
编辑4 删除MaxLength和MinLength注释解决了问题.我仍然希望使用MaxLength和MinLength注释作为我的模型验证例程的一部分.
[MinLength(3, ErrorMessage = "Minimum 3 Characters")]
[MaxLength(30, ErrorMessage = "Maximum 30 Characters")]
Run Code Online (Sandbox Code Playgroud)
MVC3 支持 [StringLength] 属性,而 [MinLenght] 和 [MaxLength] 是实体框架附带的。你能尝试这个而不是 MaxLength 吗?
[StringLength(120, ErrorMessage = "Must be under 120 characters")]
Run Code Online (Sandbox Code Playgroud)