foreach循环使用ViewData.TemplateInfo.HtmlFieldPrefix和@ Html.EditorFor

时间:2014-04-04 15:50:33

标签: c# asp.net asp.net-mvc razor

以下是我的视图页面ABCD.cshtml中的代码

foreach (var category in categories)
{
    @Html.EditorFor(m => m.UserPreferences, new { index})
}

以下是我的View-Shared-EditorTemplates中的代码MyViewModelTemplate.cshtml

@using My.MVC.Models.UserPreference
@model MyViewModelTemplate
@{
    var htmlPrefix = ViewData.TemplateInfo.HtmlFieldPrefix;
}
Prefix: @Html.Raw(htmlPrefix)<Br/>

在htmlPrefix中,我不断获取UserPreferences [0]而不是foreach集合中每个项目的一个,例如UserPreferences [0],UserPreferences [1],UserPreferences [2],......依此类推等等。

由于我只为每个控件获取UserPreferences [0],因此它将所有控件呈现如下

<input name=UserPreferences[0].MyField ....>       <---- My Problem

而不是

<input name=UserPreferences_0_.MyField ....> 
<input name=UserPreferences_1_.MyField ....> 
<input name=UserPreferences_2_.MyField ....> 

我需要在ABCD.cshtml的foreach循环中做些什么,这样我就可以在ViewData.TemplateInfo.HtmlFieldPrefix中获得适当的控件,如UserPreferences [0],UserPreferences [1],UserPreferences [2],并将控件渲染为如下:

<input name=UserPreferences_0_.MyField ....> 
<input name=UserPreferences_1_.MyField ....> 
<input name=UserPreferences_2_.MyField ....> 

1 个答案:

答案 0 :(得分:0)

尝试类似的东西可能不是正确的变量。

for(i = 0; i< category.length; i++;)
{
    @Html.EditorFor(m => m.UserPreferences[i], new { index})
}