2011-02-11 59 views
3

模型:MVC 3形式和列表:默認模型粘合劑和EditorFor

public class MyObject 
{ 
    public IList<Entry> Entries; 
} 

public class Entry 
{ 
    public string Name { get; set; } 
} 

如果我使用默認EditorFor(型號=> model.Entries)的名稱/ ID值是:

<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name"> 

相反,如果我想創建一個模板EditorFor像這樣:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<CMS.Models.MyObject>>" %> 

<div class="list"> 
<% 
    for (int i = 0; i < Model.Count; i++) 
    { %> 
    <div class="object" id="<%: i %>"> 
     <%: Html.EditorFor(model => Model[i]) %> 
     <%: Html.ValidationMessageFor(model => Model[i]) %> 
    </div> 
<% } %> 
</div> 

所發出的名稱/ ID值是:

<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name"> 

因此,名稱在屬性名稱和[0]之間有一段時間,id在索引號的左側有一個額外的下劃線。這不適用於默認模型聯編程序。有沒有辦法做到這一點,使用默認的模型聯編程序?

+1

你爲什麼要這樣做?你只是想要包含驗證信息,或者真的需要使用ID集合來設置div標籤嗎? – 2011-02-11 01:13:36

+0

我這樣做是爲了讓我可以在列表的末尾添加一個通用的基於jQuery的「添加」選項來添加另一個元素。使用該HTML發佈列表使得「添加」泛型更容易。想想一個表格,其中一個部分需要N個引用(每個引用具有多個屬性),另一個部分需要N個關於其他東西的詳細信息(每個部分都有多個屬性)等... – Cymen 2011-02-11 01:16:03

回答

3

我認爲你可以使用模板做大部分工作,而不必在列表中顯式迭代,這似乎是導致模型聯編程序的問題。

嘗試使這些共享編輯模板:

MyObject來編輯模板

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %> 

<div class="list"> 
    <%: Html.EditorFor(m => m.Entries) %> 
</div> 

條目編輯器模板

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.Entry>" %> 

<div class="object" id="<%: ??? %>"> 
    <%: Html.EditorFor(m => m.Name) %> 
    <%: Html.ValidationMessageFor(m => m.Name) %> 
</div> 

我還沒有想出的唯一事情是如何在div的id屬性中獲得正確的值,因此是問題灰色標記。最後的警告是,我在家裏,所以我沒有真正嘗試過。