Html.RenderPartial daje mi dziwny błąd przeciążenia?

103

Zrobiłem częściową stronę testową o nazwie _Test.cshtml i umieściłem ją w tym samym katalogu co mój widok, który będzie ją wywoływał, oto jest:

<div>hi</div>

W wywołującym widoku cshtml po prostu umieściłem:

@Html.RenderPartial("_Test")

Co daje mi błąd:

CS1502: Dopasowanie najlepiej przeciążonej metody dla „System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)” zawiera nieprawidłowe argumenty

Wypróbowałem również pełną ścieżkę z tym samym rezultatem.

Jestem bardzo zdezorientowany, dlaczego tak się zachowuję, zakładam, że brakuje mi czegoś prostego?

naspiński
źródło

Odpowiedzi:

190

Otrzymujesz ten błąd, ponieważ Html.RenderXXXpomocnicy zwracają void - nie mają nic do zwrócenia, ponieważ piszą rzeczy bezpośrednio * w odpowiedzi. Powinieneś ich używać w ten sposób:

@{ Html.RenderPartial("_Test"); }

Istnieje również pomocnik Html.Partial, który będzie działał z twoją składnią, ale nie polecałbym go używać, chyba że musisz, ze względu na wydajność (najpierw komponuje dany częściowy widok w łańcuch, a następnie widok nadrzędny wstawia go do odpowiedzi * ).

* to nie jest do końca prawdą, są one faktycznie renderowane do ViewContext.Writer, a po wyrenderowaniu i skomponowaniu całej strony, całość przechodzi do odpowiedzi

Lukáš Novotný
źródło