ASP.NET MVC3 - textarea con @ Html.EditorFor


209

Ho un'app ASP.NET MVC3 e ho anche un modulo per aggiungere notizie. Quando VS2010 ha creato la vista predefinita, ho solo input di testo per i dati di stringa, ma voglio avere textarea per il testo delle notizie. Come posso farlo con la sintassi di Razor.

L'immissione del testo è simile al seguente:

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

Correlato, vedere questa risposta a un'altra domanda su come personalizzare l'EditorTemplate.
Jeroen,

Risposte:


375

È possibile utilizzare l' [DataType]attributo sul modello di visualizzazione in questo modo:

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

e quindi potresti avere un controller:

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

e una vista che fa quello che vuoi:

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

7
Praticamente quello che stavo cercando, ma cosa succede se devo specificare gli attributi html di righe e colonne?
Jason,

3
Ricevo ancora [class = "text-box single-line"] al codice sorgente :(
Stavros

7
Estremamente ben informato e comunque mantenendolo il più semplice possibile e spiega tutto passo dopo passo. grandine @Darin Dimitrov.
Ismet Alkan

@Jason usa i CSS per lo styling.
Jo Smo,

DataAnnotationsftw! Grazie.
Kon

136

Qualcuno ha chiesto informazioni sull'aggiunta di attributi (in particolare, "righe" e "cols"). Se stai usando Razor, potresti semplicemente fare questo:

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

Per me va bene. "@" Viene utilizzato per evitare le parole chiave in modo che vengano trattate come variabili / proprietà.


Infatti, se sai che vuoi un'area di testo con colonne / righe, ci sono poche ragioni per usare EditorFor invece di TextAreaFor. Qualcuno ha un motivo per cui avresti ancora bisogno di usare EditorFor e sai che devi specificare colonne / righe?
James Haug,

95
@Html.TextAreaFor(model => model.Text)

6
Mi piace meglio questo metodo perché la risposta popolare qui prevede la modifica del modello di database, il che significa che è necessario eliminare e ricreare il database sottostante se si utilizza EntityFramework.
Ciaran Gallagher,

6
Quell'annotazione DataType non forza un aggiornamento in Entity Framework.
Tallmaris,

9
@Ciaran: questa affermazione dovrebbe suonare un campanello. Non dovrebbe mai essere necessario modificare il livello del database per modificare l'interfaccia utente. Dovrebbe esserci un oggetto presentazione, che è mappatore sull'oggetto database. Non utilizzare mai l'oggetto database nell'interfaccia utente.
Frederik Prijck l'

5
Per essere chiari, ciò a cui Frederik si riferisce è la creazione di classi che rappresentano i dati della vista SEPARATI dalle classi utilizzate in DbContext. Non passare i tuoi modelli DbContext nelle viste. Crea una classe del modello di vista, quindi sposta le informazioni che ti interessano dal modello db al modello di vista e viceversa quando accetti gli input.
Jim Yarbro,

3
@FrederikPrijck Non sono in disaccordo, ma ciò non viola il preside DRY? Devi copiare tutte le proprietà da una classe a un'altra classe. C'è un modo meno "banale" di farlo, che hai trovato?
James Haug,

1

Dichiarare nel modello con

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

Quindi in .cshtml puoi usare l'editor come di seguito. puoi usare @cols e @rows per le dimensioni di TextArea

     @Html.EditorFor(model => model.urString, new { htmlAttributes = new { @class = "",@cols = 35, @rows = 3 } })

Grazie !

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.