使用Razor更改MVC4中html.editorfor帮助程序的id属性

时间:2013-05-30 22:58:40

标签: asp.net-mvc-4 razor

我已经查看了一些与此相关的各种答案,但所有这些都是针对razor的mvc3。

我有一个页面,在部分视图中有多个表单,用于编辑不同的模型。但是,大多数模型都有一个“名称”字段。我希望能够指定具有特定ID的编辑器:

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name,  new {id = "PersonName"})
        @Html.ValidationMessageFor(model => model.Name)
    </div>

我尝试了其他各种各样的东西,但没有找到一个令人满意的方法来处理这个问题。我似乎有两个选择:

1)使用普通的html助手手动创建表单,并在控制器中构建模型

2)重命名模型中的所有字段以适合格式

这些都不令我兴奋所以我希望有一个替代方案,但我担心id是将表单绑定到模型时使用的内容。

4 个答案:

答案 0 :(得分:23)

我意识到这有些晚了但我自己也遇到了这个问题...我想“必须有一种方法来使用EditorFor并仍然覆盖ID”......有。执行以下操作,您的输入具有您喜欢的ID和名称。

@Html.EditorFor(model => model.myField, null, "txtMyField")

希望这有所帮助,并希望它也能帮助其他人。

注意:根据我的理解,通常不会这样做的原因是为了避免其他动态创建的控件ID和名称发生冲突。

答案 1 :(得分:19)

将你的助手从EditorFor改为TextBoxFor编辑器,没有重载来覆盖html属性

更改此

@Html.EditorFor(model => model.Name,  new {id = "PersonName"})

到此

@Html.TextBoxFor(model => model.Name,  new {id = "PersonName"})

答案 2 :(得分:2)

基于鲍勃的评论:

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

Bob的信用。

答案 3 :(得分:1)

或者,您可以添加htmlAttributes

@Html.EditorFor(Model => Model.myField, new { htmlAttributes = new { @class = "form-control", @id = "txtMyField" } })