IIS无法识别视图模型注释

时间:2011-06-10 13:46:53

标签: c# asp.net asp.net-mvc-3 data-annotations

我有一个带注释的基本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")]

6 个答案:

答案 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复制到Web服务器以及其他文件

原因是该模型将被编译到这些DLL中,因此您需要将它们上传到您的live bin文件夹中,以获取您在服务器上的属性。

如果要上传模型代码文件,它们实际上并未在服务器上使用...通常只是bin,views,scripts和content文件夹。

答案 5 :(得分:0)

您需要项目中包含的MicrosoftMvcValidation.js脚本才能使用此脚本。也许,您是删除它们还是将它们设置为不复制?