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

Asp.net mvc 4 使用Razor更改MVC4中html.editorfor帮助程序的id属性,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我已经看过了一些与此相关的答案,但都是针对mvc3的,或者不是针对Razor的 我有一个页面,在部分视图中有多个表单,用于编辑不同的模型。但是,大多数模型都有“名称”字段。我希望能够指定具有特定id的editorfor,例如: <div class="editor-label"> @Html.LabelFor(model => model.Name) </div> <div class="editor-field">

我已经看过了一些与此相关的答案,但都是针对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>

@LabelFor(model=>model.Name)
@EditorFor(model=>model.Name,新的{id=“PersonName”})
@Html.ValidationMessageFor(model=>model.Name)
我尝试过其他各种方法,但没有找到一个令人满意的方法来处理这个问题。我似乎有两个选择:

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

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


这两个都不让我兴奋,所以我希望有一个替代方案,但恐怕id就是将表单绑定到模型时使用的id

将助手从
EditorFor
更改为
TextBoxFor
EditorFor没有重载来覆盖html属性

更改此设置

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

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

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

@Html.EditorFor(model => model.myField, null, "txtMyField")
希望这有帮助,也希望它能帮助其他人


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

基于bob的评论:

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

归功于Bob。

或者,您可以添加htmlAttributes

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

对于DateTime值是否有类似的设置?我找不到,EditorFor创建了一个非常好的日期/时间选择器。用我现在可以做的其他值来尝试这一点。编辑:这非常有效,我正在将其标记为已接受,但我希望您仍然可以为datetime找到一个解决方案:)这会丢失回发时的数据吗?注意:这也会更改元素的
name
属性。可以在EditorFor@html.EditorFor中使用以下对象语法添加html属性(model=>model.FieldName,null,“newIdAndName”,new{htmlAttributes=new{@class=“form control”})如果你使用htmlAttributes,请确保使用用户名而不是名称。请看这里,我不敢相信EditorFor公然忽略了其他地方使用的@id约定。这就是ASP.NET MVC的所有问题。简言之,这确实是一场灾难。我相信ASP.NET Core修复了许多这些糟糕的选择。总的来说,这就是为什么我更喜欢inter喜欢在客户端用API做任何事情。这种HTML barf的疯狂只会给维护带来压力。