2012-06-22 15 views
5

Mam kontroler wywołujący widok. W widoku jest częściowy widok, wstawiony w ten sposób:Nie można uzyskać dostępu do danych widoku w częściowym widoku w ASP.NET MVC3

@{ Html.RenderPartial("PartialViewName", this.Model);} 

To działa dobrze.

Ale w kontrolerze chcę umieścić coś w ViewData lub ViewBag, które będę używał w częściowym widoku. Jak mogę to zrobić?

+0

chcesz użyć ViewBag w swoim częściowe lub użyj ViewBag jako model w twojej częściowy? –

+0

Dlaczego dane potrzebne do konsumpcji nie są zdefiniowane w modelu, który przekazujesz do częściowego widoku? (przecież to jest ten drugi parametr) –

+0

@ Mateusz Rogulski Chcę uzyskać wartość ViewBag w moim częściowym – Victor

Odpowiedz

4

Zarówno Html.Partial i Html.RenderPartial mają przeciążenie, które akceptuje ViewDataDictionary. Możesz zbudować nowy lub po prostu przekazać istniejący.

@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });} 

lub

@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);} 

jestem dość pewny ViewBag jest dostępny dla Twojego częściowe bez konieczności przechodzą żadnych parametrów.

EDIT:

ViewBag i ViewData pewno są dostępne zarówno podszablonów i szablonów edytora/wyświetlacz. Można je edytować w widoku przed podwładnego widok dostęp je tak:

@{ ViewBag.MyNewValue = "..."; } 
@Html.Partial("_MyPartial", Model) 

Następnie w częściowej:

@{ string myString = ViewBag.MyNewValue; } 
2

można zrobić to najprostszy sposób.

Wystarczy ustawić Viewbag.sth = value; w kontrolerze.

iw swoim częściowego wykorzystania @ViewBag.sth

6

powinieneś być w stanie zrobić to dobrze. Worek widoku i dane widoku są dostępne przez cały okres działania metody, więc jeśli dodasz element do wyświetlenia danych w metodzie kontrolera, który uzyska widok, wszelkie kolejne części, które są renderowane w tym widoku, będą miały dostęp do danych widoku . Składnia uzyskiwania wartości z danych widoku w widoku częściowym jest bardzo łatwa. Przykład:

@{ 
     var variable = ViewData["My Key"]; 
    } 
2

Jak mówili inni, tak długo, jak przypisać wartość ViewBag w swoim sposobie działania, należy być w stanie uzyskać do niego dostęp w częściowym widokiem.

Ponadto, należy być w stanie renderować częściowego bloku tak:

@Html.Partial("PartialViewName", Model) 

zamiast tego

@{ Html.RenderPartial("PartialViewName", this.Model);}. 
Powiązane problemy