ASP.NET MVC3 - textarea với @ Html.EditorFor


209

Tôi có ứng dụng ASP.NET MVC3 và tôi cũng có hình thức để thêm tin tức. Khi VS2010 tạo chế độ xem mặc định, tôi chỉ có các kiểu nhập văn bản cho dữ liệu chuỗi, nhưng tôi muốn có textarea cho văn bản tin tức. Làm thế nào tôi có thể làm điều đó với cú pháp dao cạo.

Nhập văn bản trông như thế này:

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

Liên quan, hãy xem câu trả lời này cho một câu hỏi khác về cách tùy chỉnh EditorTemplate đó.
Jeroen

Câu trả lời:


375

Bạn có thể sử dụng [DataType]thuộc tính trên mô hình xem của bạn như thế này:

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

và sau đó bạn có thể có một bộ điều khiển:

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

và một khung nhìn thực hiện những gì bạn muốn:

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

7
Khá nhiều thứ tôi đang tìm kiếm, nhưng nếu tôi cần chỉ định các thuộc tính html của hàng và cols thì sao?
Jason

3
Tôi vẫn nhận được [class = "hộp đơn văn bản"] tại mã nguồn :(
Stavros

7
Vô cùng hiểu biết và vẫn giữ nó đơn giản như nó được và giải thích mọi thứ từng bước một. mưa đá @Darin Dimitrov.
İsmet Alkan

@Jason sử dụng CSS để tạo kiểu.
Jo Smo

DataAnnotationsftw! Cảm ơn bạn.
Kon

136

Có người hỏi về việc thêm thuộc tính (cụ thể là 'hàng' và 'cols'). Nếu bạn đang sử dụng Dao cạo, bạn có thể làm điều này:

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

Nó ổn với tôi. '@' Được sử dụng để thoát từ khóa để chúng được coi là biến / thuộc tính.


Thật vậy - nếu bạn biết bạn muốn một vùng văn bản có cols / rows, có rất ít lý do để sử dụng EditorFor thay vì TextAreaFor. Bất cứ ai cũng có lý do bạn vẫn cần sử dụng EditorFor và biết rằng bạn cần chỉ định cols / rows?
James Haug

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

6
Tôi thích phương pháp này tốt hơn vì câu trả lời phổ biến ở đây liên quan đến việc sửa đổi mô hình cơ sở dữ liệu, có nghĩa là bạn phải loại bỏ và tạo lại cơ sở dữ liệu cơ bản nếu sử dụng EntityFramework.
Ciaran Gallagher

6
Chú thích DataType đó không bắt buộc làm mới trong Entity Framework.
Tallmaris 17/12/13

9
@Ciaran: Câu nói này nên rung chuông. Không bao giờ cần phải thay đổi lớp cơ sở dữ liệu để sửa đổi giao diện người dùng. Cần có một đối tượng trình bày, đó là ánh xạ tới đối tượng cơ sở dữ liệu. Không bao giờ sử dụng đối tượng cơ sở dữ liệu trong giao diện người dùng của bạn.
Frederik Prijck

5
Để rõ ràng, những gì Frederik đang đề cập đến là tạo các lớp thể hiện dữ liệu xem của bạn SEPARATE từ các lớp được sử dụng trong DbContext của bạn. Đừng chuyển các mô hình DbContext của bạn vào dạng xem. Tạo một lớp mô hình khung nhìn, sau đó chuyển thông tin bạn quan tâm từ mô hình db sang mô hình khung nhìn và ngược lại khi chấp nhận đầu vào.
Jim Yarbro

3
@FrederikPrijck Tôi không đồng ý, nhưng điều đó có vi phạm hiệu trưởng DRY không? Bạn phải sao chép tất cả các thuộc tính từ lớp này sang lớp khác. Có ít "trần tục" hơn khi làm điều đó, mà bạn đã tìm thấy?
James Haug

1

Khai báo trong Mô hình của bạn với

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

Sau đó, trong .cshtml có thể sử dụng trình chỉnh sửa như dưới đây. bạn có thể sử dụng @cols@rows cho kích thước TextArea

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

Cảm ơn !

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.