2011-08-22 5 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가 없습니다. 모델 유효성 검사는 이름과 함께 작동하지 않으며 ID 만 작동합니다. 하지만 그것은 그 문제의 일부일뿐입니다. 모델 바인더는 배열을 변경할 수 없기 때문에 배열에 바인딩 할 수 없기 때문에 배열에 반복 할당을하기가 어렵습니다. 애플리케이션의이 부분을 재고해야합니다.

둘째, DropDownList에는 기본값이 없습니다. 대부분의 경우 첫 번째 항목 만 선택하면 유효하지 않을 수 있습니다.

this article은 흥미로운 것 같습니다.

관련 문제