ASP.NET MVC3 - @ Html.EditorFor ile metin alanı


209

ASP.NET MVC3 uygulaması var ve ben de haber eklemek için formu var. VS2010 varsayılan görünüm oluşturduğunda ben sadece dize verileri için metin girişleri var, ama haber metni için textarea istiyorum. Razor sözdizimi ile nasıl yapabilirim.

Metin girişi şuna benzer:

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

İlgili, bu EditorTemplate'in nasıl özelleştirileceği hakkında başka bir soru için bu cevaba bakın .
Jeroen

Yanıtlar:


375

Bu [DataType]özelliği görünüm modelinizde şu şekilde kullanabilirsiniz:

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

ve sonra bir denetleyiciniz olabilir:

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

ve istediğinizi yapan bir görünüm:

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

7
Ne aradığını hemen hemen, ama satırları ve cols html özniteliklerini belirtmek gerekirse?
Jason

3
Hala kaynak kodunda [class = "text-box single-line"] alıyorum :(
Stavros

7
Son derece bilgili ve hala her şeyi adım adım açıklayan ve açıklayan kadar basit tutuyor. @Darin Dimitrov'u selamlayın.
İsmet Alkan

@Jason şekillendirme için CSS kullanıyor.
Jo Smo

DataAnnotationsftw! Teşekkür ederim.
Kon

136

Birisi özellik eklemeyi sordu (özellikle 'satırlar' ve 'sütunlar'). Razor kullanıyorsanız, bunu yapabilirsiniz:

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

Bu benim için işe yarıyor. '@' Anahtar kelimelerden kaçmak için kullanılır, böylece değişken / özellik olarak değerlendirilirler.


Gerçekten - sütun / satır içeren bir metin alanı istediğinizi biliyorsanız, TextAreaFor yerine EditorFor kullanmanın pek bir nedeni yoktur. Hala EditorFor'u kullanmanız için bir nedeniniz var mı ve sütun / satır belirtmeniz gerektiğini biliyor musunuz?
James Haug

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

6
Bu yöntem daha iyi çünkü burada popüler yanıt veritabanı modeli değiştirmeyi içerir, yani EntityFramework kullanıyorsanız temel veritabanı bırakmak ve yeniden oluşturmak zorunda anlamına gelir.
Ciaran Gallagher

6
Bu DataType Ek Açıklaması, Entity Framework'te bir yenilemeyi zorlamaz.
Tallmaris

9
@Ciaran: Bu ifade bir zil çalmalı. Kullanıcı arayüzünü değiştirmek için veritabanı katmanını değiştirmeye asla gerek yoktur. Veritabanı nesnesiyle eşlenen bir sunu nesnesi olmalıdır. UI'de veritabanı nesnesini asla kullanmayın.
Frederik Prijck

5
Açıkçası, Frederik'in ifade ettiği şey, DbContext'inizde kullanılan sınıflardan SEPARATE görünüm verilerinizi temsil eden sınıflar oluşturmaktır. DbContext modellerinizi görünümlere geçirmeyin. Bir görünüm modeli sınıfı oluşturun, ardından db modelinden önem verdiğiniz bilgileri görünüm modeline kaydırın ve girişleri kabul ederken bunun tersini yapın.
Jim Yarbro

3
@FrederikPrijck Katılmıyorum, ama bu KURU prensibi ihlal etmiyor mu? Tüm özellikleri bir sınıftan başka bir sınıfa kopyalamanız gerekir. Bulduğunuz, bunu yapmanın daha az "sıradan" var mı?
James Haug

1

İle Modelinizde beyan edin

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

Daha sonra .cshtml'de editör aşağıdaki gibi kullanılabilir. TextArea boyutu için @cols ve @rows öğelerini kullanabilirsiniz

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

Teşekkürler !

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.