我有一个具有许多属性的对象,其中一个是一些其他复杂对象的数组 像这样的东西
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的表单时 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
我做错了什么?
答案 0 :(得分: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(".", "");
}
所以现在一切都运行得很顺利。