如何使用Html.EditorFor和MVC3设置id

时间:2012-02-08 06:57:38

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

我正在尝试设置字段ID,如下所示:

@Html.EditorFor(x => x.Order, new { id = string.Format("Order_{0}", Model.Row) })

但这导致以下情况,似乎我的ID未设置:

<input type="text" value="334" name="item.Order" id="item_Order" class="text-box single-line">

有没有人知道我做错了什么。我检查了EditorFor的允许格式,并在google上查看了示例,但我看不到任何符合我需要的内容。

6 个答案:

答案 0 :(得分:31)

你应该改为

@Html.TextBoxFor(x => x.Order, new { id = string.Format("Order_{0}", Model.Row) })

@Html.EditorFor的第二个参数用于视图数据,而不是用于html属性

答案 1 :(得分:18)

@Html.EditorFor(x => x.Order, null, string.Format("Order_{0}", Model.Row))

答案 2 :(得分:5)

我知道这个问题很老了,但我需要做的就是以下几点:

@Html.EditorFor(modelItem => item.EndDate, 
                new { htmlAttributes = new { @class = "form-control", @id = @endID } })

您可以为其提供您想要/需要的任何类别或ID。我之前在页面中也有这个,为每个项目创建一个不同的ID:

string endID = "end-" + @item.ID;

希望这有助于将来。

答案 3 :(得分:3)

您是否尝试为x.Order创建编辑器模板?

在你的编辑器模板上有这个:

<input type="text" id="@ViewData["id"]">

并在您的视图页面上使用它:

@Html.EditorFor(x => x.Order, new { id = string.Format("Order_{0}", Model.Row) })

答案 4 :(得分:2)

我不确定在使用强类型助手时是否可以覆盖ID属性。但您可以使用其他非模型类型:

@Html.Editor(string.Format("Order_{0}", Model.Row), Model.Order)

这将使用第一个参数作为ID,第二个参数作为默认值。

答案 5 :(得分:0)

如果要使用EditorFor,可以执行以下操作:

@Html.EditorFor(model => model.Order, new { htmlAttributes = new { @id = "YOUR_ID_HERE"})

对于上面的示例,它是:

@Html.EditorFor(model => model.Order, new { htmlAttributes = new { @id = $"Order_{0}" } })

Svetlosav的答案看起来不错,但这会破坏您的数据绑定。如果使用该答案,请检查模型是否按预期填充,而不是使用默认值(null,false,0等)填充。