2012-02-08 18 views
23

Estoy tratando de establecer un identificador de campo de la siguiente manera:¿Cómo puedo programar una ID usando Html.EditorFor con MVC3

@Html.EditorFor(x => x.Order, new { id = string.Format("Order_{0}", Model.Row) }) 

pero esto da lugar a la siguiente y parece que mi identificación no se está estableciendo:

<input type="text" value="334" name="item.Order" id="item_Order" class="text-box single-line"> 

¿Alguien tiene una idea de lo que estoy haciendo mal. Revisé los formatos permitidos para EditorFor y busqué ejemplos en google, pero no pude ver nada que coincidiera con lo que necesitaba.

+0

Agregue '@' antes de 'id' como '@ id =' – Hadas

+0

id NO es una palabra clave en C#, así que no necesita usar el @, esto solo es necesario con palabras clave como @class – Jaap

Respuesta

30

Debe cambiar a

@Html.TextBoxFor(x => x.Order, new { id = string.Format("Order_{0}", Model.Row) }) 

El segundo parámetro de @Html.EditorFor es para datos de vista, no para los atributos HTML

+0

Gracias. Esto funcionó muy bien. Ahora me pregunto cuál es la diferencia entre Html.EditorFor y Html.TextBoxFor. ¿La diferencia es que EditorFor usa las plantillas? –

+1

Sí, EditorFor es para tipo/plantilla personalizada. – dohaivu

+21

¿Pero qué pasa con la pregunta original? ¿Qué sucede si quiere/necesito usar EditorFor - Cómo establecer la identificación? – JonK

2

No estoy seguro de si puede anular el atributo ID cuando utiliza los ayudantes fuertemente tipados. Pero se puede utilizar otro tipo no modelo:

@Html.Editor(string.Format("Order_{0}", Model.Row), Model.Order) 

Esto utilizará el primer parámetro como el ID y el segundo como el valor predeterminado.

3

han intentado crear un editor de plantillas para su x.Order?

tienen esto en su editor de plantillas:

<input type="text" id="@ViewData["id"]"> 

y utilizar esto en su página de vista:

@Html.EditorFor(x => x.Order, new { id = string.Format("Order_{0}", Model.Row) }) 
13
@Html.EditorFor(x => x.Order, null, string.Format("Order_{0}", Model.Row)) 
+5

Esta debería ser la respuesta aceptada, ya que responde a la pregunta realmente hecha, en lugar de cambiarla. – ChrisFox

3

Sé que esta pregunta es bastante viejo, pero todo lo que tenía que hacer fue el siguiente:

@Html.EditorFor(modelItem => item.EndDate, 
       new { htmlAttributes = new { @class = "form-control", @id = @endID } }) 

Puede darle cualquier clase o id que desee/necesite. Tengo esto antes en mi página, así como crear un ID diferente para cada elemento:

string endID = "end-" + @item.ID; 

Esperamos que esto ayude a alguien en el futuro.

Cuestiones relacionadas