2012-01-02 29 views
12

Tengo un proyecto del ASP MVC 3 Cuando usoHtml.TextBoxFor, agregue el nombre del modelo como prefijo a Identificación

@Html.TextBoxFor(model => model.Name) 

la TexBoxFor render como

<input id="Name" name="Name" type="text" value="" /> 

mi modelo es "UserModel":

[DisplayName("Name")] 
public string Name{ get; set; } 

¿hay una manera de agregar al nombre del modelo como prefijo en la identificación? tal vez algún atributo?

quiero que el cuadro de texto hará que como

<input id="UserName" name="UserName" type="text" value="" /> 
+4

Si desea que se llama nombre de usuario en la vista, por qué no llamarlo nombre de usuario en el modelo? –

+0

En segundo lugar el comentario de Oyvind, ¿por qué una propiedad, llamada Nombre, está decorada con un atributo que obliga a "Nombre", pero quieres que se muestre como "Nombre de usuario"? Me parece extraño. – enorl76

+0

es una opción para cambiar el nombre de la propiedad, pero si hay una manera de poner un atributo para todos los htlr hrlpers así que era mucho mejor y más fácil. – Kobi

Respuesta

-2

puede escribir:

@Html.TextBoxFor(model => model.Name, new { @id= "UserName",@Name="UserName" }) 
+0

su código aún generará el atributo 'name' como ** Nombre **. Entonces, esto no es lo que él quiere. – tugberk

+0

No es un problema. Puede escribir: @ Html.TextBoxFor (model => model.Name, new {@id = "UserName", @ Name = "UserName"}) – Hadas

+2

¡Eso está completamente mal! No puede anular el atributo 'name' cuando trabaja con helpers html como' TextBoxFor'. Por cierto, para tu información, no necesitas '@' escapar de allí. Utiliza el carácter de escape '@' con palabras clave especiales de C# como 'clase'. – tugberk

2

El ayudante TextBoxFor utiliza la expresión lambda que se pasa como primer argumento para calcular el nombre de la campo de entrada. Así que si desea que el campo de entrada generado al ser llamado UserName, sólo tiene que cambiar el nombre de la propiedad en su modelo de vista:

[DisplayName("Name")] 
public string UserName { get; set; } 
0

Debe cambiar su atributo DisplayName de "Nombre" a "nombre de usuario".

[DisplayName("UserName")] 
public string Name{ get; set; } 

Si lo hace, obtendrá lo que está pidiendo.

+1

No funciona, El nombre de la propiedad será el nombre del cuadro de texto – gdoron

3

Si no desea representar la entrada como se describe en su modelo, probablemente no desee utilizar el asistente Html.TextBoxFor.

Pruebe Html.TextBox en su lugar. Puede dotarla de los valores exactos que está buscando:

@Html.TextBox("UserName", Model.Name, new { id = "UserName" }) 

No olvide que también puede olvidarse de los ayudantes y utilizar el viejo y simple html:

<input id="UserName" name="UserName" type="text" value="@Model.Name" /> 

Advertencia: Al utilizar cualquiera de estos métodos y el archivador de modelo predeterminado, el valor de esta entrada no se vinculará correctamente a su modelo al enviar de nuevo los datos.

+0

¿Podría explicar un poco la parte de "advertencia"? ¿Los campos de formulario no están guardados en la devolución de datos en MVC? –

+2

Los valores están vinculados a modelos basados ​​en los nombres de entrada. Entonces, en este caso, la carpeta de modelo no sabe que el valor de la entrada "Nombre de usuario" corresponde al valor de "Nombre" en el modelo. – enoshixi

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

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

+2

-1: Esto dará como resultado dos atributos llamados name: Name = "txt1" y name = "attr". Funciona en Firefox, ya que el navegador ignora el segundo nombre-atributo. Pero esto es esencialmente un fracaso. –

+1

WOW, estaba intentando anular el nombre en los atributos html y no funcionaba debido a un nombre minúsculo. Gracias. – DeadlyChambers

0

Si he entendido bien su pregunta, usted quiere ser capaz de prefijar una cadena en nombre de la propiedad del modelo.

Por lo tanto si se encuentra en la vista 'Cuenta', obtendrá

AccountName 

mientras que en la vista de 'Prueba', obtendrá

TestName 

Si ese es el caso, piensa que su mejor opción es reemplazar el método de extensión PartialFor, de manera similar como se hace aquí:

ASP.NET MVC partial views: input name prefixes

En este ejemplo, se trata de prestar

Account.Name and Test.Name 
Cuestiones relacionadas