2011-08-22 65 views
0

我正在測試我的視圖/編輯模型的數據註釋,並且一些錯誤沒有顯示出來。它們都屬於財產一級,但它們並未顯示爲屬性級別或模型級別。他們根本沒有出現。ASP.NET MVC 2 - 一些驗證錯誤沒有出現

我查看/編輯模式:

public class AdminGameEditModel 
{ 
    [Required] 
    public int GameID { get; set; } 

    [Required(ErrorMessage="A game must have a title")] 
    [DisplayFormat(ConvertEmptyStringToNull=false)] 
    public string GameTitle { get; set; } 

    [Required(ErrorMessage="A short URL must be supplied")] 
    [DisplayFormat(ConvertEmptyStringToNull=false)] 
    public string Slug { get; set; } 

    [Required(ErrorMessage="A box art image must be supplied")] 
    public HttpPostedFileBase BoxArt { get; set; } 

    [Required(ErrorMessage="A large image for the index page is required")] 
    public HttpPostedFileBase IndexImage { get; set; } 

    [Required(ErrorMessage="A game must have a review")] 
    [DisplayFormat(ConvertEmptyStringToNull=false)] 
    public string ReviewText { get; set; } 

    [Required(ErrorMessage="A game must have a score")] 
    public int ReviewScore { get; set; } 

    [Required(ErrorMessage="A game must have at least one Pro listed")] 
    [DisplayFormat(ConvertEmptyStringToNull=false)] 
    public string[] Pros { get; set; } 

    [Required(ErrorMessage="A game must have at least one Con listed")] 
    [DisplayFormat(ConvertEmptyStringToNull=false)] 
    public string[] Cons { get; set; } 

    [Required(ErrorMessage="A game must belong to a genre")] 
    public int GenreID { get; set; } 

    [Required(ErrorMessage="A game must be associated with at least one platform")] 
    public int[] PlatformIDs { get; set; } 
} 

性能,其有效性似乎不正常工作的優缺點,並GenreID。我試圖在我看來如何調用它們:

<p> 
    <%: Html.Label("Genre") %> 
    <%: Html.ValidationMessageFor(model => Model.GameData.GenreID) %> 
    <%: Html.DropDownListFor(m => Model.GameData.GenreID, new SelectList(Model.AllGenres, "GenreID", "Name", Model.GameData.GenreID)) %> 
</p> 

<p> 
    <%: Html.LabelFor(model => Model.GameData.Pros) %><br /> 
    <% for (var i = 0; i < 5; ++i) 
     { %> 
      <input type="text" name="GameData.Pros" value="<%: (Model.GameData.Pros[i] != null && String.IsNullOrEmpty(Model.GameData.Pros[i])) ? "" : Model.GameData.Pros[i] %>" /><br /> 
    <% } %> 

    <%: Html.ValidationMessageFor(model => Model.GameData.Pros) %> 
</p> 

<p> 
    <%: Html.LabelFor(model => Model.GameData.Cons) %><br /> 
    <% for (var i = 0; i < 5; ++i) 
     { %> 
      <input type="text" name="GameData.Cons" value="<%: (Model.GameData.Cons[i] != null && String.IsNullOrEmpty(Model.GameData.Cons[i])) ? "" : Model.GameData.Cons[i] %>" /><br /> 
    <% } %> 

    <%: Html.ValidationMessageFor(model => Model.GameData.Cons) %> 
</p> 

其餘的都顯示正常。我很難理解爲什麼這三個都沒有出現。我沒有看到任何跳動到我身上的事情。我正在使用默認模型聯編程序和驗證服務。

任何想法?

回答

1

那麼,對於初學者..你的輸入字段沒有身份證。模型驗證不適用於名稱,僅適用於id。但這只是問題的一部分。 Model Binder不太可能綁定到數組,因爲數組是不可變的,這使得它很難對它們進行迭代賦值。你將不得不重新考慮你的應用程序的這一部分。

其次,你的DropDownList沒有默認值。在大多數情況下,只需選擇第一個項目,這樣就無法使其無效。

你可能會覺得this article有趣。