2011-01-28 7 views
146

Tại sao theo mặc định, những thay đổi này lại được thêm khi thêm chế độ xem "chỉnh sửa" mới? Ưu điểm khi sử dụng EditorFor() so với TextboxFor() là gì?Sự khác biệt giữa Html.TextboxFor và Html.EditorFor trong MVC và Razor

Tôi thấy điều này

Theo mặc định, Tạo và chỉnh sửa giàn giáo hiện nay sử dụng các helper Html.EditorFor thay vì helper Html.TextBoxFor. Điều này cải thiện hỗ trợ siêu dữ liệu trên mô hình dưới dạng thuộc tính chú thích dữ liệu khi hộp thoại Thêm chế độ xem tạo ra chế độ xem.

+4

có ai có ví dụ về cách thực hiện việc này không? ví dụ viết trình soạn thảo cho một DatePicker? – ShaneKm

Trả lời

138

Ưu điểm của EditorFor là mã của bạn không được gắn với <input type="text". Vì vậy, nếu bạn quyết định thay đổi thứ gì đó về cách hộp văn bản của bạn được hiển thị như thế nào trong gói div, bạn có thể chỉ cần viết mẫu trình chỉnh sửa tùy chỉnh (~/Views/Shared/EditorTemplates/string.cshtml) và tất cả hộp văn bản trong ứng dụng của bạn sẽ tự động được hưởng lợi từ thay đổi này trong khi nếu bạn có hardcoded Html.TextBoxFor bạn sẽ phải sửa đổi nó ở khắp mọi nơi. Bạn cũng có thể sử dụng Chú thích dữ liệu để kiểm soát cách thức được hiển thị.

+0

Xin chào @Darin, bạn đã từng là ngôi sao MVC .. thx – Irfan

53

Html.TextboxFor luôn tạo một hộp văn bản (<input type="text" ...).

Trong khi EditorFor xem loại và thông tin meta và có thể hiển thị điều khiển khác hoặc mẫu bạn cung cấp.

Ví dụ về thuộc tính DateTime, bạn có thể tạo mẫu sử dụng jQuery DatePicker.

+12

Bất kỳ Ví dụ nào về cách triển khai trình đếm ngày tháng jquery bằng cách sử dụng editfor? – Peru

+2

cảm ơn đơn giản hóa sự khác biệt bằng cách sử dụng trường hợp ngày giờ. – Kings

+1

@Peru, [tại đây] (http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/) hoặc [tại đây] (http://www.asp.net/mvc/overview/older- phiên bản/sử dụng-the-html5-và-jquery-ui-datepicker-popup-lịch-với-aspnet-mvc/sử dụng-the-html5-và-jquery-ui-datepicker-popup-lịch-với-aspnet-mvc- part-4) là cách 'thực hiện jquery datepicker' và sử dụng nó với' EditorFor' là [here] (http://stackoverflow.com/a/23142692/2218697) – stom

102

TextBoxFor: Nó sẽ hiển thị như phần tử nhập văn bản html tương ứng với biểu thức được chỉ định. Nói một cách đơn giản, nó sẽ luôn luôn hiển thị như một kiểu dữ liệu đầu vào không phân biệt kiểu dữ liệu của thuộc tính đang liên kết với điều khiển.

EditorFor: Điều khiển này thông minh một chút. Nó ám HTML đánh dấu dựa trên kiểu dữ liệu của thuộc tính. Ví dụ. giả sử có một thuộc tính boolean trong mô hình. Để hiển thị thuộc tính này trong chế độ xem làm hộp kiểm, chúng tôi có thể sử dụng CheckBoxFor hoặc EditorFor. Cả hai sẽ tạo ra cùng một đánh dấu.

Lợi thế của việc sử dụng EditorFor là gì?

Như chúng ta biết, tùy thuộc vào kiểu dữ liệu của thuộc tính mà nó tạo đánh dấu html. Vì vậy, giả sử ngày mai nếu chúng ta thay đổi kiểu dữ liệu của thuộc tính trong mô hình, không cần phải thay đổi bất cứ điều gì trong khung nhìn. Trình điều khiển EditorFor sẽ tự động thay đổi đánh dấu html.

+10

câu trả lời tuyệt vời, đơn giản mà có thể dễ dàng hấp thụ ngay cả khi người mới. – Kings

+0

mô tả ở trên sẽ giúp liên kết này https://forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel –

+0

Có trường hợp nào bạn hoàn toàn nên sử dụng TextBoxFor không? – eaglei22

3

Cũng có sự khác biệt nhỏ về đầu ra html cho loại dữ liệu chuỗi.

Html.EditorFor: 
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName"> 

Html.TextBoxFor: 
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName"> 
+1

đó là câu trả lời sai lầm tuyệt đối, bởi vì sự khác biệt chính là Texbox trả về đầu vào và editorfor trả về mẫu của bạn, nơi đầu vào là mẫu mặc định cho editorfor. –

5

Đây là một trong những khác biệt cơ bản không được đề cập trong ý kiến ​​trước:
Readonly bất động sản sẽ làm việc với textbox cho và nó sẽ không làm việc với EditorFor.

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" }) 

Trên đang hoạt động, trong khi đó với sau bạn không thể thực hiện điều khiển để readonly.

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" }) 
+7

Bạn có thể làm cho EditorFor chỉ đọc bằng cú pháp sau: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}}) –