2011-02-07 34 views
197

Tengo la aplicación ASP.NET MVC3 y también tengo forma para agregar noticias. Cuando VS2010 creó la vista predeterminada, solo tengo entradas de texto para los datos de cadena, pero quiero tener un área de texto para el texto de las noticias. Cómo puedo hacerlo con la sintaxis de Razor.ASP.NET MVC3 - textarea con @ Html.EditorFor

texto mirada de entrada como esta:

@Html.EditorFor(model => model.Text) 
+0

Relacionado, vea [esta respuesta] (http://stackoverflow.com/a/10696647/419956) a otra pregunta acerca de cómo personalizar ese EditorTemplate. – Jeroen

Respuesta

352

se puede utilizar el atributo [DataType] del modelo de vista como esta:

public class MyViewModel 
{ 
    [DataType(DataType.MultilineText)] 
    public string Text { get; set; } 
} 

y entonces usted podría tener un controlador:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 
} 

y una vista que hace lo que quiere:

@model AppName.Models.MyViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Text) 
    <input type="submit" value="OK" /> 
} 
+6

Más o menos lo que estaba buscando, pero ¿qué sucede si necesito especificar los atributos filas y cols html? – Jason

+3

Todavía estoy obteniendo [class = "text-box single-line"] en el código fuente :( – Stavros

+6

Extremadamente informado y manteniéndolo tan simple como parece y lo explica paso a paso. Granizo Dimitrov @ . –

94
@Html.TextAreaFor(model => model.Text) 
+6

Me gusta más este método porque la respuesta popular aquí implica modificar el modelo de base de datos, lo que significa que debe soltar y volver a crear la base de datos subyacente si usa EntityFramework. –

+5

Esa anotación de DataType no fuerza una actualización en Entity Framework. – Tallmaris

+9

@Ciaran: Esta afirmación debe sonar como una campana. Nunca debería haber necesidad de cambiar la capa de la base de datos para modificar la UI. Debería haber un objeto de presentación, que sea asignador al objeto de la base de datos. Nunca use el objeto de la base de datos en su UI –

120

Alguien le preguntó sobre la adición de atributos (en concreto, 'filas' y 'cols'). Si está utilizando Razor, puede hacer esto:

@Html.TextAreaFor(model => model.Text, new { cols = 35, @rows = 3 }) 

Eso funciona para mí. El '@' se usa para escapar palabras clave, por lo que se tratan como variables/propiedades.

+0

De hecho, si conoce su deseo de un área de texto con cols/rows, hay pocas razones para usar EditorFor en lugar de TextAreaFor. ¿Alguien tiene una razón por la que todavía necesitaría usar EditorFor y saber que necesita especificar cols/rows? –