2009-08-20 17 views
8

Jedna z nowych funkcji w ASP.NET MVC 2 Podgląd 1 jest wsparciem dla koncepcji edytora szablonów i szablonów wyświetlania, które pozwalają na wstępne zdefiniowanie jak dany obiekt będzie wyświetlany na wyświetlaczu lub edycji za pomocą prostego połączenia HTML pomocnika:ASP.NET MVC 2 - Kiedy używać szablonów a kiedy używać częściowych widoków

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

jest to całkiem fajne, ale ja naprawdę nie widzę różnicy między tym i częściowym widokiem, który służy temu samemu celowi . Ponadto w przykładach, które widziałem, szablony edytora nie zawierają rzeczywistych znaczników formularzy, a w przypadku, gdy potrzebuję zapewnić pewne funkcje po stronie klienta dla danego edytora (np. Poprzez jQuery), nie mogę bezpiecznie umieścić tego kodu w szablon, ponieważ nie będę miał statycznej obsługi formularza, do którego dodaję logikę w kliencie. W aplikacji, nad którą pracuję, mam mieszankę szablonów redaktora i częściowych widoków, które renderuję do edycji treści. W zależności od złożoności formularza tworzę edytor, ponieważ wybrałem jedno podejście nad drugim, ale to oczywiście dodaje niepożądany poziom niespójności do aplikacji.

Po co używać szablonu w widoku częściowym lub odwrotnie? Dodatkowo, kiedy używasz szablonu edytora, jaki jest idealny sposób na dodanie logiki po stronie klienta do edytora bez kopiowania go do każdego widoku, który używa tego edytora?

Odpowiedz

3

ScottGu wyjaśnia niektóre z tego w swoim blogpost about MVC V2.

Z tego co zdobędę, utworzę dane wejściowe dla każdej właściwości obiektu, który przekazujesz pomocnikowi. Więc jeśli masz obiektu:

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

a następnie utworzyć edytora:

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

To będzie produkować do wprowadzania tekstu dla nazwy klienta i MyCoolCalendar (co jest customdefined sterowania) dla CoolDate bez konieczności pisania niestandardowego formantu, aby zawinąć cały obiekt. Automatycznie wnioskuje o rodzaju kontroli z rodzaju/uihint nieruchomości. Przynajmniej tak było, jak to zrozumiałem, ale nie miałem czasu, aby go przetestować.

+0

Znam stanowisko pana Gu i wyjaśnia, że ​​EditorFor może być stosowany zarówno dla poszczególnych kierunków i całych obiektów. Mam na myśli ten drugi przypadek w moim scenariuszu powyżej. –

+0

Oh okej. Określa również cel tego postu: "Domyślnie będzie pętla nad publicznymi właściwościami obiektu i wygeneruje element

+0

Czy to znaczy, że nie muszę jawnie definiować szablonu, gdy wywołuję funkcję EditorFor (SomeObject), o ile nie potrzebuję wykonywać żadnych specjalnych czynności, takich jak obsługa niestandardowych pól? –

0

Oto jeden przykład, który okazał się dobrze działać.

Załóżmy, że masz klienta, który ma adres. Nie możesz utworzyć adresu dla NOWYCH klientów, ale poprzez powiązanie możesz mieć obiekt klienta, który ma adres w polu.

Następnie, w swojej metodzie "Twórz" dla Klienta, powołujesz się na Html.EditorFor(c => c.Address); (i możesz stworzyć niestandardowy szablon dla swoich potrzeb tutaj), który wytworzy całkowicie wypełniony obiekt Adres, który możesz zapisać przed Klientem, rozwiązując w ten sposób zależność.

Teraz, gdy masz dane referencyjne, takie jak lista krajów lub państwa, czy cokolwiek, może lepiej po prostu użyć widoku częściowego, aby go renderować i nie zawracać sobie głowy skojarzeniami.

Nadzieja to pomaga,

-vlad

Powiązane problemy