我已经查看了一些与此相关的各种答案,但所有这些都是针对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是将表单绑定到模型时使用的内容。
答案 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" } })