2013-01-12 59 views
-1

結合館藏模型我有很多特性的對象,其中之一是一些其他的複雜對象的數組
像這樣Asp.Net MVC 3不上張貼

class obj1 
{ 
public string prop1 {get; set;} 
public string prop2 {get; set;} 
public obj2[] array {get; set;} 
} 
class obj2 
{ 
SomeEnum Type{get; set;} 
string Content{get; set;} 
} 

我已經創建了一個編輯器模板OBJ2的陣列可以命名爲obj2ArrayTemplate
是這樣

@for (int i = 0; i < Model.Length; i++) 
{ 
    @Html.EditorFor(model=>model[i],"obj2Template") 
} 

和obj2的編輯模板,可以將它命名爲obj2Template
是這樣

<div class="editor-label"> 
    @Html.DisplayFor(model=>model.Type,"SomeEnum",ViewData) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Content) 
    @Html.ValidationMessageFor(model => model.Content) 
</div> 

現在因爲財產Type如果SomeEnum型這是一種enum,因此不能由Asp.Net MVC
我已經創建了一個模板,這也
直接呈現的這是這樣的

<input type="text" value="@Model.ToString()" id="@ViewData.TemplateInfo.HtmlFieldPrefix" name="@ViewData.TemplateInfo.HtmlFieldPrefix"/> 

視圖被正確渲染,並將合併的呈現的視圖的HTML是

<div class="editor-field"> 
    <input class="text-box single-line" id="array__0__Content" name="array.[0].Content" type="text" value="FBID" /> 
</div> 
<div class="editor-label"> 
<input type="text" value="Blog" id="array.[1].Type" name="array.[1].Type"/> 
</div> 
<div class="editor-field"> 
    <input class="text-box single-line" id="array__1__Content" name="array.[1].Content" type="text" value="SOme random blog" /> 
</div> 
<div class="editor-label"> 
<input type="text" value="Twitter" id="array.[2].Type" name="array.[2].Type"/> 
</div> 
<div class="editor-field"> 
    <input class="text-box single-line" id="array__2__Content" name="array.[2].Content" type="text" value="Twitter Profile" /> 
</div> 

當IAM回發包含該HTML
鉻的形式示出了我這個發佈數據

prop1:val1 
prop2:val2 
array.[0].Type:Facebook 
array.[0].Content:FBID 
array.[1].Type:Blog 
array.[1].Content:SOme random blog 
array.[2].Type:Twitter 
array.[2].Content:Twitter Profile 

但仍陣列字段,它是在obj1類型的模型中的array of obj2null

我做錯了什麼?

回答

1

可能破解一個:)
檢查正被從我發現有一個服務器發佈請求。(點)的額外的請求,以便該陣列不被填充
所以不是

array.[0].Type:Facebook 
array.[0].Content:FBID 
array.[1].Type:Blog 
array.[1].Content:SOme random blog 
array.[2].Type:Twitter 
array.[2].Content:Twitter Profile 

這應該被調回

array[0].Type:Facebook 
array[0].Content:FBID 
array[1].Type:Blog 
array[1].Content:SOme random blog 
array[2].Type:Twitter 
array[2].Content:Twitter 

,我發現爲什麼Asp.Net MVC框架中,額外的點放的沒有明顯的原因。當我完成所有的MVC方式
所以我改變了我的代碼,包括一點點黑客。
我加入這個喜歡OBJ 2

@{ 
    ViewData.TemplateInfo.HtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix.Replace(".", ""); 
    } 

所以現在一切都運行良好,順暢的編輯模板。

+1

這是一個完全不必要的破解。通過在'for'循環中使用'EditorFor()'來告訴幫助者添加額外的點。將'EditorTemplate'重命名爲'obj2.cshtml'(即類的名稱),並在主視圖中將其'EditorFor(m => m.array)' - 控件正確命名。 –