1

내 모델에서 작동하도록 클라이언트 측 유효성 검사를 얻으려고합니다. 지금까지 작동하지 않습니다.데이터 주석이있는 컬렉션에서 MVC 3 클라이언트 측 유효성 검사가 작동하지 않습니다.

내 모델은 모음의 속성이 있습니다

public class NewsEventsModel 
{ 
    public List<NewsItemDetails> newsItems { get; set; } 
    public int pageNumber { get; set; } 
    public int totalPages { get; set; } 
    public bool canManageNews { get; set; } 
    public long userID { get; set; } 
} 

및 NewsItemDetails는 thusly 히 정의 :

public class NewsItemDetails 
{ 
    public long itemID { get; set; } 

    public long postedByID { get; set; } 

    public DateTime datePosted { get; set; } 

    [Required(ErrorMessage = "Please enter news or event text")] 
    [StringLength(100)] 
    [RegularExpression(RegExpressions.freeTextRestrict)] 
    public string newsBody { get; set; } 

    [StringLength(50)] 
    [RegularExpression(RegExpressions.freeTextRestrict)] 
    public string newsTitle { get; set; } 
} 

내가보기에 걸쳐 NewsEventsModel을 보낼 수 있습니다. 그리고 내보기에 나는

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

다음을 포함 뷰 코드에서 나는

for (int j = 0; j < Model.newsItems.Count(); j++) 
    { 

     /// bunch of stuff 
     // then: 
    <div class="editblock"> 
     @Html.TextAreaFor(model => model.newsItems[j].newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" }) 
     @Html.ValidationMessageFor(model => model.newsItems[j].newsBody) 
    </div> 
    } 

을하지만 텍스트 영역에있는 모든 텍스트를 삭제하고 "필요한"메시지가 표시되지 않습니다, 저장을 클릭하면 .. 다른 규칙을 위반할 때 어떤 메시지도 나타나지 않습니다.

그러나 클라이언트 쪽 유효성 검사는 최상위 NewsEventsModel의 속성 중 하나에 유효성 검사 주석을 넣은 다음보기의 텍스트 상자에 포함하면 작동합니다. 저수준 NewsItemDetails 클래스에서는 작동하지 않습니다.

무엇이 여기에 있습니까?

답변

3

보기에 편집기 템플릿을 사용해보십시오 :

@Html.EditorFor(x => x.newsItems) 

~/Views/Shared/EditorTemplates/NewsItemDetails.cshtml 내부를 : 일

@model AppName.Models.NewsItemDetails 

// bunch of stuff 
// then: 
<div class="editblock"> 
    @Html.TextAreaFor(model => model.newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" }) 
    @Html.ValidationMessageFor(model => model.newsBody) 
</div> 
+0

을! 나는이 시점에서 템플릿을 조사하지 않았지만 지금부터 얼마나 강력한지 알게 될 것입니다. 감사! – Cynthia

+0

@Cynthia, 예 편집기/디스플레이 템플릿은 매우 유용합니다. –

+0

내가 변경해야했던 유일한 것은 @ Html.EditorFor (x => x.newsItems [j])를 사용하는 것이 었습니다. 루프에 있기 때문입니다. 그렇지 않으면 루프를 통해 매번 컬렉션의 모든 항목에 대한 텍스트 상자가 생성되었습니다 (사용자가 EDIT를 클릭 할 때까지 숨겨져 있기 때문에 처음에는 알지 못했습니다). 그러나 다른 상황에서는 이것이 바람직한 결과 일 수 있습니다. – Cynthia

관련 문제