Sự khác nhau giữa Html.TextboxFor và Html.EditorFor trong MVC và Dao cạo


170

Tại sao theo mặc định chúng được thay đổi khi thêm chế độ xem "chỉnh sửa" mới? Lợi thế khi sử dụng EditorFor()so với là TextboxFor()gì?

tôi đã tìm thấy cái này

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


5
Có ai có một ví dụ về cách này được thực hiện? ví dụ viết trình soạn thảo cho DatePicker?
ShaneKm

Câu trả lời:


166

Ưu điểm của EditorForlà mã của bạn không bị ràng buộc với <input type="text". Vì vậy, nếu bạn quyết định một cái gì đó thay đổi các khía cạnh về cách textbox của bạn được trả lại như gói chúng trong một divbạn chỉ có thể viết một mẫu biên tập tùy chỉnh ( ~/Views/Shared/EditorTemplates/string.cshtml) và tất cả các hộp thoại của bạn trong ứng dụng của bạn sẽ tự động được hưởng lợi từ sự thay đổi này trong khi nếu bạn đã hardcoded Html.TextBoxForbạn sẽ phải sửa đổi nó ở 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 hiển thị này.


Có một lỗi, có thể là trong một phiên bản cũ. EditorFor không nhận ra 'double'. Đối với 'dài', nó coi nó là 'int' và step = "0.01" không hoạt động trong các thuộc tính nên tôi đã sử dụng TextBoxFor và thêm @ type = 'number' @ step = "0.01" để nó hoạt động
Charlie

129

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

EditorFor : Điều khiển này hơi thông minh. Nó kết xuất đánh dấu HTML 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 dạng xem dưới dạng hộp kiểm, chúng ta có thể sử dụng CheckBoxFor hoặc EditorFor. Cả hai sẽ được 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 ra đá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 thay đổi bất cứ điều gì trong chế độ xem. Kiểm soát EditorFor sẽ tự động thay đổi đánh dấu html.


15
câu trả lời tuyệt vời, đơn giản mà có thể dễ dàng tiếp thu ngay cả bởi một người mới.
Các vị vua

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

Đã bao giờ có trường hợp bạn hoàn toàn nên sử dụng TextBoxFor chưa?
Eaglei22

55

Các Html.TextboxForluôn tạo ra một textbox ( <input type="text" ...).

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

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


12
Bất kỳ ví dụ nào về cách triển khai datepicker jquery bằng editfor?
Peru

2
cảm ơn vì đã đơn giản hóa sự khác biệt bằng cách sử dụng trường hợp ngày giờ.
Các vị vua

1
@Peru, ở đây hoặc ở đây là làm thế nào để implement jquery datepickervà sử dụng nó với EditorForở đây
shaijut

8

Đây là một trong những khác biệt cơ bản không được đề cập trong các bình luận trước: thuộc
Readonlytính sẽ hoạt động với hộp văn bản và nó sẽ không hoạt động EditorFor.

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

Mã ở trên hoạt động, khi mà theo sau bạn không thể kiểm soát để chỉ đọc .

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

16
Bạn có thể tạo EditorFor chỉ đọc bằng cú pháp sau: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttribut = new {@readonly = "readonly"}})
Doug Knudsen

4

Cũng có một chút khác biệt trong đầu ra html cho kiểu 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">

2
Đó là câu trả lời hoàn toàn sai, vì sự khác biệt chính là Texbox trả về đầu vào và trình soạn thảo trả về mẫu của bạn trong đó đầu vào là mẫu mặc định cho trình soạn thảo.
Artem G
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.