2011-01-30 13 views
5

Estoy usando EditorFor() ayudante para renderizar la plantilla de edición en mi vista y me gustaría llamar al DisplayFor() dentro de esta plantilla para procesar la plantilla de visualización.¿Es posible utilizar DisplayFor() desde dentro del editor de plantilla para control

gusta esta

esto es dentro del /Shared/EditorTemplates/Client.ascx

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

En la plantilla DisplayFor me hacen salir propiedades del cliente. La plantilla DisplayFor funciona perfectamente bien cuando se la llama desde cualquier otro lugar, pero desde la plantilla EditorFor no muestra nada. Parece que la llamada DisplayFor() nunca llega realmente a la plantilla DisplayFor.

Respuesta

3

me temo que la única manera de hacerlo es utilizar un parcial:

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

He intentado con <% Html.RenderPartial (MVC.Shared.Views.DisplayTemplates.Client, Model); %> ya que uso T4MVC y no encuentra el control de usuario de la vista. Devuelve el error estándar, buscando en los directorios y no encontrándolo. De lo contrario, mi T4MVC ha funcionado todo el tiempo hasta ahora. – mare

+0

tampoco lo hace, el mismo error <% = Html.Partial (MVC.Shared.Views.DisplayTemplates.Client)%> - ¿hay algo especial acerca de esas dos carpetas? – mare

+0

@mare, no, no debería haber nada especial. Prueba pasar una cuerda para ver si hace alguna diferencia. Además, ¿qué le dice la ubicación buscada en el mensaje de error? ¿Dan algunos consejos? –

1

Puede ser discutible si es una buena idea a la plantilla objetos complicados, o si mi acercamiento a las plantillas anidadas es un truco o no. La ventaja de esto es tener una única plantilla para el padre y el hijo, ambos pueden tener plantillas en lugar de tener que elegir/usar vistas parciales.

Todo eso de lado, vistas de plantilla se pueden anidar, si se utiliza una vista parcial como un intermediario entre.

La plantilla exterior tendrá algo así como debajo de donde desea colocar la plantilla interior:

Html.RenderPartial("SharedDisplayGoBetweenForFoo", item); 

La compartido parcial se vería así:

@model Foo 

@Html.DisplayFor(a => a); 

La plantilla interior sería entonces llamados y se vería como cualquier otro.

Cuestiones relacionadas