2011-01-30 4 views
5

Tôi đang sử dụng trợ giúp EditorFor() để hiển thị mẫu chỉnh sửa trong chế độ xem của mình và tôi muốn gọi DisplayFor() bên trong mẫu này để hiển thị mẫu Hiển thị.Có thể sử dụng DisplayFor() từ trong điều khiển mẫu EditorFor

Như thế này

này là bên trong /Shared/EditorTemplates/Client.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<BusinessNext.Models.Ef.Client>" %> 
<%: Html.DisplayFor(client=>client) %> 

Trong mẫu DisplayFor tôi render ra thuộc tính của khách hàng. DisplayFor mẫu hoạt động hoàn hảo tốt khi được gọi từ mọi nơi khác nhưng từ mẫu EditorFor nó không hiển thị bất cứ điều gì. Dường như cuộc gọi DisplayFor() chưa bao giờ thực sự được đưa vào mẫu DisplayFor.

Trả lời

3

Tôi sợ rằng cách duy nhất là sử dụng một phần:

<%= Html.Partial("~/Views/Home/DisplayTemplates/Client.ascx", Model) %> 
+0

Tôi đã thử với <% Html.RenderPartial (MVC.Shared.Views.DisplayTemplates.Client, Model); %> kể từ khi tôi sử dụng T4MVC và nó không tìm thấy điều khiển người dùng xem. Nó trả về lỗi chuẩn, tìm kiếm các thư mục và không tìm thấy nó. Nếu không, T4MVC của tôi đã làm việc tất cả các thời gian cho đến nay. – mare

+0

không thực hiện điều này, cùng một lỗi <% = Html.Partial (MVC.Shared.Views.DisplayTemplates.Client)%> - có điều gì đặc biệt về hai thư mục đó không? – mare

+0

@ ác, không, không nên có gì đặc biệt. Hãy thử đi qua một chuỗi để xem nó có tạo ra sự khác biệt nào không. Ngoài ra vị trí được tìm kiếm trong thông báo lỗi cho bạn biết điều gì? Họ đưa ra một số gợi ý? –

1

Nó có thể gây tranh cãi nếu nó là một ý tưởng tốt để template đối tượng phức tạp, hoặc nếu cách tiếp cận của tôi để các mẫu lồng nhau là một hack hay không phải. Ưu điểm của việc này là có một mẫu duy nhất cho cả cha và con đều có thể có các khuôn mẫu thay vì phải chọn/sử dụng các khung nhìn một phần.

Tất cả những điều đó sang một bên, chế độ xem khuôn mẫu có thể được lồng nhau, nếu bạn sử dụng chế độ xem một phần khi di chuyển giữa.

Mẫu bên ngoài sẽ có cái gì đó như bên dưới nơi bạn muốn đặt mẫu nội:

Html.RenderPartial("SharedDisplayGoBetweenForFoo", item); 

Các chia sẻ một phần sẽ trông như thế này:

@model Foo 

@Html.DisplayFor(a => a); 

Mẫu nội sau đó sẽ được gọi là và trông giống như bất kỳ người nào khác.