繁体   English   中英

IIS 无法识别视图 model 注释

[英]IIS doesn't recognise view model annotations

我有一个带有注释的基本 MVC 视图 model,例如:

    [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; }

我有一个基于此视图 model 的强类型视图。 当我在本地运行应用程序时,以下代码会生成“Your Name”label:

@Html.LabelFor(model => model.YourName)

当应用程序部署在具有 .NET 4 应用程序池的 IIS7 上时,label 显示“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在同一视图 model 我有 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; }

此属性在视图中使用:

    <div>
        @Html.LabelFor(model => model.FromEmail)    
        @Html.EditorFor(model => model.FromEmail)        
    </div>

但它工作得非常好:(因此 email 属性在实时和开发环境中都可以正常工作。其他属性仅在开发环境中工作。

编辑 4删除 MaxLength 和 MinLength 注释解决了这个问题。 我仍然想使用 MaxLength 和 MinLength 注释作为我的 model 验证例程的一部分。

[MinLength(3, ErrorMessage = "Minimum 3 Characters")]
[MaxLength(30, ErrorMessage = "Maximum 30 Characters")]

在您的示例中,您的 Model 上有以下属性。

[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”应该获得“Your Name”的 label。

但是,在您看来,您并没有显示 YourName 属性。

@Html.LabelFor(model => model.FromName)
@Html.EditorFor(model => model.FromName)  

因此,您需要在 FromName 属性中添加类似的属性。

MVC3 支持 [StringLength] 属性,而 [MinLenght] 和 [MaxLength] 带有实体框架。 你可以试试这个而不是 MaxLength 吗?

[StringLength(120, ErrorMessage = "Must be under 120 characters")]  

我对 razor 很陌生,但我认为 DisplayTextFor 没有给你 label。 @Html.LabelFor()不会更有意义吗?

我刚刚使用 .NET 4 应用程序池在 IIS7 上对此进行了测试,就像您的情况一样,它对我来说绝对没问题。 你能描述一下你是如何进行部署的吗? 我使用默认配置文件在 Visual Studio 2010 中进行了简单的右键单击>发布。 另外要检查的一件事是服务器上安装的 .NET 版本是最新的。 它应该是 v4.0.30319 或更高版本。 也许我可以 email 你我的解决方案,这样你就可以在你的服务器上测试它?

答案 2 - 我的第一个答案实际上只是指出了问题中的错误类型,但根据您对部署的评论,我认为您的问题可能与您的部署有关,而不是与您的代码有关。

如果您正在执行 x-copy 部署,请确保将所有最新的 DLL 复制到 bin 目录中。 我的意思是...

  • 确保构建解决方案,并且构建成功
  • 将新建的 DLL 复制到您的 web 服务器以及其他文件

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

如果您要上传 model 代码文件,它们实际上并没有在服务器上使用……通常只是 bin、views、scripts 和 content 文件夹。

您需要项目中包含的 MicrosoftMvcValidation.js 脚本才能正常工作。 您是否可能删除了它们或将它们设置为不复制?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM