当模型包含多个元素时,如何防止asp.net mvc 3上的html输入id重复

时间:2011-02-22 16:30:56

标签: asp.net-mvc asp.net-mvc-3

我有一个允许用户插入相同类型的多个元素的视图。

 @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,我可以这样做,但是,是否有自动实现的方法?

由于

2 个答案:

答案 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>
    }