2011-02-16 15 views
46

Estoy tratando de crear un cuadro de texto de líneas múltiples utilizando ASP.NET MVC con el siguiente código.creando cuadro de texto multilínea utilizando la función Html.Helper

<%= Html.TextBox("Body", null, new { TextBoxMode = "MultiLine", Columns = "55px", Rows = "10px" })%> 

Simplemente aparece un cuadro de texto de tamaño fijo de una sola línea.

por otro lado

<asp:TextBox runat="server" ID="Body" TextMode="MultiLine" Columns="55" Rows="10"></asp:TextBox> 

representa la vista derecha, pero en el método puesto de controlador con FormCollection nombrado forma

form["Body"]; 

devuelve un valor nulo.

+0

Sólo notado que en el primer ejemplo, usted tiene Columnas = "55 píxeles". ¿Eso es un error tipográfico o es así en el código?Vea si solucionarlo soluciona su problema :) No estoy seguro de que así sea, por eso es solo un comentario ... –

+0

Aún seguiría la ruta de dataanotaciones, a menos que sea un proyecto de MVC1 – MrBliz

Respuesta

97

un cuadro de texto multilínea en html es <textarea>:

<%= Html.TextArea("Body", null, new { cols = "55", rows = "10" }) %> 

o:

<%= Html.TextArea("Body", null, 10, 55, null) %> 

o incluso mejor:

<%= Html.TextAreaFor(x => x.Body, 10, 55, null) %> 

Y sin embargo, otra posibilidad es decorar su propiedad vista del modelo con el atributo [DataType]:

[DataType(DataType.MultilineText)] 
public string Body { get; set; } 

y en su opinión:

<%= Html.EditorFor(x => x.Body) %> 

y establecer la anchura y la altura a través de CSS.

+0

Normalmente utilizo EditorFor, y establecer la altura, etc. con Css. Parece más limpio – MrBliz

+0

@ Doozer1979, yo también :-) –

+0

Muchas gracias, ¡eso funciona! También me di cuenta de que el atributo de las columnas es cols ... – paaone

0

Creo que el Html.EditorFor es lo que estás buscando. Eso es solo para MVC2 y para arriba. ¿Eso ayuda?

Si está utilizando DataAnnotations y decora su propiedad con el [DataType(DataType.MultilineText)] Atributo, MVC debe andamiar el html requerido para usted.

+2

No existe el atributo 'MultilineText'. ¿Te refieres al atributo 'DataType'? –

+0

Sí, tienes razón. Meant DataType.MultilineText – MrBliz

6

MVC4 se debe utilizar:

@Html.TextAreaFor(x => x.Body, 10, 15, null) 
+0

con clase como 'new {@class =" form-control "}' marcar [aquí] (http://stackoverflow.com/a/6218024/2218697) – stom

1

Esto permite a varias líneas, conjunto personalizado anchura y la altura y el establecimiento de marcador de posición. Para la validación utilizado StringLength o RegularExpression en Model.cs

Razor Ver Sintaxis

@Html.TextAreaFor(model => model.property, new { style = "width: 420px; height: 100px;", placeholder = "Placeholder here.." }) 
0

en la entidad de capa:

[MaxLength(500)] 
public string Body { get; set; } 

Y a la vista:

@Html.TextAreaFor(model => model.Body, new { rows = 10, cols = 50 }) 
0

VB solución .net:

@ Html.TextAreaFor (Función (Modelo) Model.Body, 3, 55, Nada)

Cuestiones relacionadas