2009-08-20 38 views
8

Một trong những tính năng mới trong ASP.NET MVC 2 Preview 1 là hỗ trợ cho khái niệm Editor Templates và Display Templates cho phép bạn định nghĩa trước làm thế nào một đối tượng nhất định sẽ được trả lại cho hiển thị hoặc chỉnh sửa với một đơn giản gọi HTML helper:ASP.NET MVC 2 - Khi nào sử dụng mẫu và khi sử dụng một phần lượt xem

<%=Html.EditorFor(customer => customer) %> 
<%=Html.DisplayFor(customer => customer) %> 

này là khá mát mẻ, nhưng tôi không thực sự thấy sự khác biệt giữa điều này và một Xem phần phục vụ cùng một mục đích . Hơn nữa, trong các ví dụ, tôi thấy các Editor Editor không chứa các thẻ form thực tế và trong trường hợp tôi cần cung cấp một số chức năng phía máy khách cho một trình soạn thảo cụ thể (nói qua jQuery), tôi không thể đặt mã đó một cách an toàn mẫu vì tôi sẽ không có xử lý tĩnh trên biểu mẫu tôi đang thêm logic vào trong ứng dụng khách. Trong ứng dụng tôi đang làm việc trên tôi có một hỗn hợp của Editor Templates và xem một phần mà tôi render để chỉnh sửa nội dung. Tùy thuộc vào độ phức tạp của biểu mẫu Tôi đang tạo ra một trình soạn thảo cho tôi đã chọn một cách tiếp cận khác, nhưng điều này tất nhiên thêm một mức độ không mong muốn của sự mâu thuẫn với ứng dụng.

Tại sao lại sử dụng Mẫu trên một phần Xem hoặc ngược lại? Ngoài ra, khi sử dụng Mẫu biên tập, cách lý tưởng để thêm logic phía máy khách vào trình chỉnh sửa mà không sao chép nó vào mọi chế độ xem sử dụng trình chỉnh sửa đó là gì?

Trả lời

3

ScottGu giải thích một số điều này trong số blogpost about MVC V2 của mình.

Từ những gì tôi thu thập điều này sẽ tạo đầu vào cho mỗi thuộc tính của đối tượng bạn chuyển đến trình trợ giúp. Vì vậy, nếu bạn có các đối tượng:

public class Customer 
{ 
    public string Name { get; set; } 
    [UIHint("MyCoolCalendar")] 
    public DateTime CoolDate { get; set; } 
} 

Và sau đó tạo ra một biên tập viên:

<%= Html.EditorFor(customer => customer) %> 

Nó sẽ tạo ra một đầu vào văn bản cho tên của khách hàng, và một MyCoolCalendar (đó là một điều khiển customdefined) cho CoolDate mà không cần phải viết một điều khiển tùy chỉnh để bọc toàn bộ đối tượng. Nó tự động suy ra loại điều khiển từ kiểu/uihint của thuộc tính. Ít nhất điều này là như tôi đã hiểu nó mà không có thời gian để kiểm tra nó ra được nêu ra.

+0

Tôi đã đọc bài của ông Gu và nó giải thích rằng EditorFor có thể được sử dụng cho cả các lĩnh vực cá nhân và toàn bộ các đối tượng. Tôi đang đề cập đến trường hợp sau trong kịch bản của tôi ở trên. –

+0

Oh okay. Ông tuyên bố mục đích của điều đó trong bài viết là tốt: "Theo mặc định nó sẽ lặp lại các thuộc tính công cộng của đối tượng và tạo ra một yếu tố

+0

Vì vậy, đó là để nói rằng tôi không cần phải xác định rõ ràng một mẫu khi tôi gọi EditorFor (SomeObject) miễn là tôi không cần phải làm bất cứ điều gì đặc biệt như xử lý các lĩnh vực tùy chỉnh? –

0

Dưới đây là một ví dụ mà tôi thấy hoạt động tốt.

Giả sử bạn có khách hàng có Địa chỉ. Bạn không thể tạo một địa chỉ cho một khách hàng mới, nhưng thông qua hiệp hội, bạn có thể có một đối tượng khách hàng có một địa chỉ trường. Sau đó, trong phương thức "Tạo" của bạn cho Khách hàng, bạn gọi Html.EditorFor(c => c.Address); (và bạn có thể tạo mẫu tùy chỉnh cho nhu cầu của mình tại đây) sẽ tạo ra đối tượng Địa chỉ được điền hoàn toàn mà bạn có thể lưu trước Khách hàng, do đó giải quyết sự phụ thuộc.

Bây giờ, khi bạn có dữ liệu tham khảo, chẳng hạn như danh sách hoặc quốc gia, hoặc bất cứ điều gì, nó có thể tốt hơn để chỉ sử dụng một phần xem để render nó và không bận tâm với Hiệp hội.

Hope this helps,

-vlad

Các vấn đề liên quan