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正是如此定義:

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 2011-03-09 18:08:41

+0

@Cynthia,是編輯/顯示模板是超級有用的。 – 2011-03-09 18:12:07

+0

我唯一需要改變的地方是使用@ Html.EditorFor(x => x.newsItems [j]) - 因爲它在循環中。否則MVC每次通過循環爲集合中的所有項目生成文本框(我沒有注意到,因爲它們在用戶點擊EDIT之前是隱藏的)。但在其他情況下,這可能是一個理想的結果 - 很好的瞭解。 – Cynthia 2011-03-09 18:34:26

相關問題