2012-11-18 16 views
9

Mam kontroler, akcja, która zwraca PartialViewResult i wyświetlić z nim. Do testowania wyprowadzam bieżący DateTime (w akcji) iw widoku sprawdzam, czy jest on zerowy czy nie, więc wiem, co mam.Jaka jest różnica między metodami Html.Partial i Html.Action?

Kiedy próbuję "osadzić" ten widok w innym z Html.Action otrzymuję bieżącą datę i czas, więc moja akcja jest wywoływana.

Ale kiedy używam Html.Partial widok jest renderowany z wartością null, moja metoda akcji nie jest wywoływana. Ponadto potwierdzają również dwa breakpointy i debugger, w drugim przypadku moja metoda działania nie jest wywoływana.

metoda działania:

public PartialViewResult Test() 
{ 
    return PartialView(DateTime.Now); 
} 

(częściowy) widok:

@model DateTime? 

<p>@(Model ?? DateTime.MinValue)</p> 

i połączenia z głównym widoku jest albo @Html.Action("Test") lub @Html.Partial("Test").

+0

Czy możesz pokazać nam "główny widok" – gdoron

Odpowiedz

23

Metoda html.Action() wywoła metodę, ale Html.Partial() nie będzie. Funkcja Html.Partial() po prostu renderuje częściowy widok i jest przydatna, jeśli masz trochę statycznej zawartości lub masz już załadowane dane widoku.

Html.Partial("PartialName", Model.PartialData); 

Wyrenderuje widok PartialName z przekazanymi do niego danymi modelu. To świetny sposób na podzielenie widoków na czyste sekcje, bez konieczności ponoszenia dodatkowych żądań do serwera.

Html.Action("Test") 

wywoła swoją akcję testową i wyrenderuje wynik.

Oto dlaczego widzisz NULL DateTime. Html.Action() faktycznie wywołuje akcję, obliczając DateTime i renderując widok, podczas gdy Html.Partial() renderuje tylko widok.

+0

Dziękujemy za bardzo pouczającą odpowiedź! – greenoldman

+1

Nie można nazwać '@ Html.Partial (" Test ", nowy {DateTime.Now}'? –

+0

Tak, możesz to również zrobić.Możesz nawet zostawić nowe {}, ponieważ DateTime jest również ważny jako Model.Myślę, że pytanie było szerzej o różnicę między Html.Action i Html.Partial jednak, a OP wspomniał tylko o DateTime.Now jako do testowania. – mfanto

Powiązane problemy