2011-02-07 13 views
197

Mam aplikację ASP.NET MVC3 i mam również formularz do dodawania wiadomości. Kiedy VS2010 utworzył domyślny widok, mam tylko wejścia tekstowe dla danych ciągów, ale chcę mieć textarea dla tekstu wiadomości. Jak mogę to zrobić za pomocą składni Razor.ASP.NET MVC3 - textarea z @ Html.EditorFor

wejście wygląd tekstu tak:

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

Powiązane, patrz [ta odpowiedź] (http://stackoverflow.com/a/10696647/419956) na inne pytanie dotyczące sposobu dostosowania tego EditorTemplate. – Jeroen

Odpowiedz

352

Można użyć atrybutu [DataType] na modelu widoku tak:

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

a następnie można mieć Kontroler:

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

i widok, który robi to, co chcesz:

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

Prawie czego szukałem, ale co jeśli potrzebuję określić atrybuty html wierszy i cols? – Jason

+3

Wciąż otrzymuję [class = "pole tekstowe jednoliniowe"] pod kodem źródłowym :( – Stavros

+6

Niezwykle kompetentny i wciąż zachowujący prostotę i wyjaśniający wszystko krok po kroku. Hail @Darin Dimitrov. –

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

Ta metoda jest lepsza, ponieważ popularna odpowiedź wymaga modyfikacji modelu bazy danych, co oznacza, że ​​musisz usunąć i ponownie utworzyć bazową bazę danych, jeśli korzystasz z EntityFramework: –

+5

Ta adnotacja DataType nie wymusza odświeżania w Entity Framework. – Tallmaris

+9

@Ciaran: To polecenie powinno wywołać dzwonek.Nie powinno być potrzeby zmiany warstwy bazy danych w celu zmodyfikowania interfejsu użytkownika.Nie powinien istnieć obiekt prezentacji, który jest maperem do obiektu bazy danych.Nigdy nie używaj obiektu bazy danych w ur UI –

120

Ktoś poprosił o dodanie atrybutów (konkretnie, 'wiersze' i 'cols'). Jeśli używasz maszynki Razor, możesz to zrobić:

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

To działa dla mnie. Znak '@' służy do unikania słów kluczowych, więc traktowane są jako zmienne/właściwości.

+0

Rzeczywiście - jeśli wiesz, że chcesz obszaru tekstowego z cols/rows, nie ma powodu, aby używać EditorFor zamiast TextAreaFor. Ktoś ma powód, dla którego nadal musiałbyś używać EditorFor i wiesz, że musisz podać cols/rows? –