簡體   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