我有一个带注释的基本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)
当应用程序部署在带有.NET 4应用程序池的IIS7上时,标签显示“YourName”(没有空格)。
这非常古怪,我之前没遇到过这个。有人知道可能导致这种情况的原因吗?
清除缓存,已经从一系列Web客户端测试,结果是相同的。
修改
@model MVC.Web.Models.ContactUsModel
<div>
@Html.LabelFor(model => model.YourName)
@Html.EditorFor(model => model.YourName)
</div>
编辑2 该字段上的所有注释都被忽略。还有其他文本类型字段,它们具有相同的问题。这只发生在实时服务器上。实时服务器是IIS 7,已在Plesk 10.2上配置。想知道这是不是因为我使用的是MVC 3 RTM。
编辑3 在同一视图模型中,我有电子邮件属性:
[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环境中都能正常工作。其他属性只能在开发环境中使用。
编辑4 删除MaxLength和MinLength注释可以解决问题。我仍然希望使用MaxLength和MinLength注释作为我的模型验证例程的一部分。
[MinLength(3, ErrorMessage = "Minimum 3 Characters")]
[MaxLength(30, ErrorMessage = "Maximum 30 Characters")]
答案 0 :(得分: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属性添加类似的属性。
答案 1 :(得分:1)
MVC3支持[StringLength]属性,而[MinLenght]和[MaxLength]支持Entity Framework。 你能尝试一下而不是MaxLength吗?
[StringLength(120, ErrorMessage = "Must be under 120 characters")]
答案 2 :(得分:0)
我对剃刀很新,但我认为DisplayTextFor没有给你一个标签。
@Html.LabelFor()
不会更有意义吗?
答案 3 :(得分:0)
我刚刚在带有.NET 4应用程序池的IIS7上测试了这个,就像你的情况一样,它对我来说绝对没问题。 你能描述一下你的部署方式吗?我使用默认配置文件在Visual Studio 2010中进行了简单的右键单击&gt;发布。 另外要检查一件事是服务器上安装的.NET版本是最新的。它应该是v4.0.30319或更高版本。也许我可以通过电子邮件向您发送我的解决方案,以便您可以在服务器上进行测试?
答案 4 :(得分:0)
答案2 - 我的第一个答案真的只是指出问题中的错误类型,但根据您对部署的评论,我认为您的问题可能与您的部署有关,而不是您的代码。
如果要执行x-copy部署,请确保将所有最新的DLL复制到bin目录中。我的意思是......
原因是该模型将被编译到这些DLL中,因此您需要将它们上传到您的live bin文件夹中,以获取您在服务器上的属性。
如果要上传模型代码文件,它们实际上并未在服务器上使用...通常只是bin,views,scripts和content文件夹。
答案 5 :(得分:0)
您需要项目中包含的MicrosoftMvcValidation.js脚本才能使用此脚本。也许,您是删除它们还是将它们设置为不复制?