7

我查看了一些与此相关的各种答案,但所有答案都是针对 mvc3 或不针对 Razor。

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

    <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

4 回答 4

27

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

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

希望这会有所帮助,并希望它也可以帮助其他人。

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

于 2014-02-27T19:22:44.523 回答
20

将您的助手从 EditorFor 更改EditorForTextBoxFor没有重载来覆盖 html 属性

改变这个

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

对此

@Html.TextBoxFor(model => model.Name,  new {id = "PersonName"})
于 2013-05-30T23:01:07.650 回答
2

根据鲍勃的评论:

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

归功于鲍勃。

于 2016-05-26T12:44:26.353 回答
2

或者,您可以添加 htmlAttributes

@Html.EditorFor(Model => Model.myField, new { htmlAttributes = new { @class = "form-control", @id = "txtMyField" } })
于 2016-12-30T12:05:02.010 回答