我有一个具有许多属性的对象,其中一个是其他一些复杂对象的数组,
就像这样
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
if 的类型SomeEnum
是 an 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>
当我发回包含此 html
chrome 的表单时,向我显示了此发布的数据
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
array of obj2
但仍然是类型模型中的数组字段obj1
是null
我究竟做错了什么?