-1

我有一个具有许多属性的对象,其中一个是其他一些复杂对象的数组,
就像这样

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>

现在因为属性Typeif 的类型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但仍然是类型模型中的数组字段obj1null

我究竟做错了什么?

4

1 回答 1

1

可以破解那个:)
检查从服务器发布的请求我发现请求中有一个 .(dot) 额外的,所以数组没有被填充
所以而不是

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(".", "");
    }

所以现在一切都运行良好。

于 2013-01-12T19:42:47.167 回答