Change id attribute of an html.editorfor helper in

2019-01-23 20:56发布

I have looked through some various answers related to this but all were for mvc3 or not for Razor.

I have a single page that has multiple forms, in partial views, that are for editing a different models. However, most of those models have a 'name' field. I am looking to be able to specify an editorfor with a specific id as such:

    <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>

I have tried various other things but have not found a satisfactory way to handle this. The two choices I seem to have are:

1) Create a form manually using the normal html helpers and construct the model in the controller

2) Rename all the fields in the model to fit the format

Neither of these are exciting to me so I am hoping for an alternative but am afraid that the id is what is used when binding the form to a model.

4条回答
啃猪蹄的小仙女
2楼-- · 2019-01-23 21:41

Change your helper from EditorFor to TextBoxFor the EditorFor, doesn't have a overload to override html properties

Change this

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

To this

@Html.TextBoxFor(model => model.Name,  new {id = "PersonName"})
查看更多
家丑人穷心不美
3楼-- · 2019-01-23 21:42

Based on bob's comment :

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

Credits to Bob.

查看更多
一纸荒年 Trace。
4楼-- · 2019-01-23 21:47

I realise this is somewhat late but I just ran into this problem myself... I thought "there has to be a way to use the EditorFor and still override the ID"... there is. Do the following and your input has an ID and Name of whatever you like.

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

Hope this helps and hope it helps other people too.

Note: from what I understand, the reason this is typically not done is to avoid other, dynamically created controls ID's and Names from conflicting.

查看更多
家丑人穷心不美
5楼-- · 2019-01-23 21:59

Alternatively you can add htmlAttributes

@Html.EditorFor(Model => Model.myField, new { htmlAttributes = new { @class = "form-control", @id = "txtMyField" } })
查看更多
登录 后发表回答