2013-01-12 56 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)' - 控件正确命名。 –