2011-08-03 27 views
7

¿Es posible controlar el atributo de nombre de, por ejemplo, una entrada de texto cuando se utiliza TextBoxFor?nombre de control en TextBoxFor en MVC3

este código en la vista

@Html.TextBoxFor(m => m.SearchParams.someParam) 

producir este

<input id="SearchParams_someParam" name="SearchParams.someParam" type="text" value=""> 

pero yo no quiero que mi nombre de entrada sea "SearchParams.someParam" y quería que ser algo así como

<input id="SearchParams_someParam" name="MyPreferedName" type="text" value=""> 

donde MyPreferedName proviene de algunos atributos el .SearchParams.someParam en la correspondencia modelo de ing.

¿Esto es posible? Sé que @ Html.TextBox lo hace, pero no quiero codificar el nombre en la vista.

+0

duplicados de http : //stackoverflow.com/questions/6064363/mvc2-impossible-to-ch ange-the-name-with-textboxfor y http://stackoverflow.com/questions/6057865/asp-net-mvc-3-override-name-attribute-with-textboxfor –

+0

El 'nombre' es el nombre del campo de valor está publicado en el servidor con.Si está utilizando el * Para los métodos de ayuda, está pasando una expresión de propiedad de modelo, y si desea que el campo se vincule a esa propiedad en el modelo, entonces necesita usar el nombre correcto, el que MVC genera para tú. No hay una buena razón para anularlo. El atributo 'id' se puede anular, porque puede usarlo como quiera en JavaScript, pero el atributo 'nombre' sirve para una función específica en el marco de MVC; se usa en el enlace del modelo en las espaldas de la publicación. Para nombres personalizados, use la sobrecarga que.acepta un nombre/valor. – Triynko

Respuesta

0

¿No funciona? @Html.TextBoxFor(m => m.SearchParams.someParam, new { id="my_id" }) aunque para su caso específico Es ser más como:

@Html.TextBoxFor(m => m.SearchParams.someParam, new { name = "MyPreferedName" })

Aquí encontrará los diferentes sobrecargas para el constructor de la InputExtensions.TextBoxFor en MVC3

+3

Funciona para ID pero NO funciona para el atributo de nombre! – iCode

+0

Qué tal esto: @ Html.TextBoxFor (m => m.SearchParams.someParam, new {@name = "MyPreferedName"}) – PedroC88

+0

De hecho, lo hice con el @ al probarlo, pero voy a intentarlo una vez más . – iCode

4

Parece como si el TextBoxFor método no le permiten usar la clave @name como un htmlAttribute. Esto tiene un poco de sentido porque si le permitiera anular el atributo de nombre HTML, el valor no se vincularía correctamente a su modelo en un formulario POST.

En lugar de utilizar ...

@Html.TextBoxFor(x => Model.MyProperty, new { @name = "desired_name" }); // does not work 

terminé tener que utilizar ...

@Html.TextBox("desired_name", Model.MyProperty); // works 

No estoy exactamente seguro de por qué la primera opción no funciona pero espero que esto ayuda a conseguir alrededor.

+0

¿Cómo funciona eso y aún termina vinculando al modelo en la publicación del formulario? Estoy teniendo ese problema. La solución que presentó funciona, pero pierdo el enlace – Icestorm0141

+0

La primera opción no funciona porque estos * Para todos los métodos se llama: 'tagBuilder.MergeAttributes (htmlAttributes); tagBuilder.MergeAttribute ("nombre", fullHtmlFieldName, true); 'El último parámetro" verdadero "es" replaceAttributes ", por lo que sobrescribirá los valores que proporcione en htmlAttributes con el valor de fullHtmlFieldName que genera de la expresión de propiedad de su modelo. En cuanto a "por qué" fue diseñado de esta manera, creo que su primer párrafo da en el clavo ... para asegurarse de que el nombre correcto se utiliza para enlazar a la propiedad de su modelo. – Triynko

0

TextBoxFor no permite establecer el atributo de nombre. Esta solución:

@Html.EditorFor(m => m.UserName, null, "user_name") 

salidas:

<input class="text-box single-line" id="user_name" name="user_name" type="text" value="" /> 
+0

pero usar EditorFor no me permite configurar sus htmlAttributes? –

+0

uso TextBox en su lugar para mi propósito. –

21
@Html.TextBoxFor(model => model.attr, new { Name = "txt1" }) 

Sólo uso "Nombre" en lugar de "nombre"

+1

¿Por qué funciona eso? Oh, bueno ... esto funciona siempre y cuando la propiedad del nombre sea "Nombre" –

+1

Esto no impide que 'TextBoxFor' emita el atributo' name' ... esto simplemente agrega otro atributo llamado 'Name' también .. No es lo que se solicitó. – Sheridan

+0

Al hacer esto, los valores en su cuadro de texto no se vincularán correctamente al envío del formulario. Su modelo termina con nulo para la propiedad attr. – Icestorm0141

1

Uso cuadro de texto en lugar de TextBoxFor

@Html.TextBox("MyPreferedName", Model.SearchParams.someParam) 
Cuestiones relacionadas