2011-01-30 10 views
5

Używam pomocnika EditorFor() do renderowania szablonu edycji w moim widoku i chciałbym wywołać DisplayFor() wewnątrz tego szablonu, aby renderować szablon wyświetlania.Czy można użyć DisplayFor() z poziomu kontrolki szablonu EditorFor

Ci się to

tym jest wewnątrz /Shared/EditorTemplates/Client.ascx

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

w szablonie Displayfor renderować się właściwości klienta. Szablon DisplayFor działa doskonale, gdy jest wywoływany z dowolnego miejsca, ale z szablonu EditorFor nie renderuje niczego. Wygląda na to, że wywołanie DisplayFor() nigdy nie przechodzi do szablonu DisplayFor.

Odpowiedz

3

Obawiam się, że jedynym sposobem jest użycie częściowy:

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

Próbowałem z <% Html.RenderPartial (MVC.Shared.Views.DisplayTemplates.Client, Model); %> ponieważ używam T4MVC i nie znajduje on kontroli użytkownika widoku. Zwraca standardowy błąd, przeszukując katalogi i nie znajdując go. W przeciwnym razie mój T4MVC pracował tak długo. – mare

+0

nie robi tego, ten sam błąd <% = Html.Partial (MVC.Shared.Views.DisplayTemplates.Client)%> - czy jest coś specjalnego w tych dwóch folderach? – mare

+0

@mare, nie, nie powinno być nic specjalnego. Spróbuj podać ciąg znaków, aby sprawdzić, czy to ma znaczenie. Co również mówi wyszukiwana lokalizacja w komunikacie o błędzie? Czy dają jakieś wskazówki? –

1

To może być wątpliwe, czy jest to dobry pomysł, aby szablon skomplikowanych obiektów, czy moje podejście do zagnieżdżonych szablonów jest hack lub nie. Zaletą tego jest posiadanie pojedynczego szablonu dla rodzica, a dziecko może mieć szablony zamiast wybierać/używać widoków cząstkowych.

Wszystko na bok, widoki szablonowe mogą być zagnieżdżone, jeśli używasz częściowego widoku jako przejścia między.

Szablon zewnątrz będzie mieć coś jak poniżej, gdzie chcesz umieścić wewnętrzną szablonu:

Html.RenderPartial("SharedDisplayGoBetweenForFoo", item); 

udostępnionego częściowy będzie wyglądać następująco:

@model Foo 

@Html.DisplayFor(a => a); 

Wewnętrzna szablon będzie wówczas o nazwie i wyglądałby jak każdy inny.

Powiązane problemy