我有一个允许用户插入相同类型的多个元素的视图。
@foreach (var gm in Model)
{
<tr><td>
@Html.TextBoxFor(model => gm.name)
</tr></td>
}
但是,当我看到生成的HTML时,它会复制id和名称
<tr><td>
<input id="gm_name" name="gm.name" type="text" value="" />
</td></tr>
<tr><td>
<input id="gm_name" name="gm.name" type="text" value="" />
</td></tr>
有没有办法自动添加1,2,3等和id的结尾,例如:
<tr><td>
<input id="gm_name1" name="gm.name1" type="text" value="" />
</td></tr>
<tr><td>
<input id="gm_name2" name="gm.name2" type="text" value="" />
</td></tr>
如果我生成所有的html,我可以这样做,但是,是否有自动实现的方法?
由于
答案 0 :(得分:1)
你可能想要它的价值。
<tr><td>
<input id="gm_0__name" name="gm[0].name" type="text" value="" />
</td></tr>
<tr><td>
<input id="gm_0__name" name="gm[1].name" type="text" value="" />
</td></tr>
从源代码中可以看出,用于从模型表达式转换名称的ExpressionHelper方法了解数组索引表达式。你可能会尝试类似的东西:
@for (int i = 0; i < Model.Count; ++i )
{
<tr><td>
@Html.TextBoxFor(m => m[i].name)
</tr></td>
}
我承认我没有在MVC3中试过这个,所以我不确定它是否会起作用。在早期版本中,我手工制作了这类东西。
答案 1 :(得分:1)
使用TextBox方法,而不是使用TextBoxFor,您可以指定要使用的名称。我认为这样的事情应该有效:
@foreach (int i = 0; i < Model.Count; i++)
{
var gm = Model[i];
<tr><td>
@Html.TextBox("gm.name" + i, gm.name, new {id = "gm_name" + i})
</tr></td>
}