Astazi vreau sa vorbim despre ViewBag. Daca nu l-ati folosit pana
acuma, in MVC 3 acesta este un dictionar dynamic, in care se pot pune valori pentru
a fi trasmise de la controller la view date. Cel mai nice lucru la el este ca este
un tip de data dynamic. Cea ce inseamna ca putem sa facem get/set la date
folosind propietati pe post de keys.
In loc de:
ViewData["DateNow"]
= DateTime.Now;
ViewData["Age"] = 55;
ViewData["Age"] = 55;
Avem:
ViewBag.DateNow = DateTime.Now;
ViewBag.Age = 55;
ViewBag.Age = 55;
Sa trecem la lucruri mai interesante. Daca avem un View care
contine un partial view in care populam ViewBag-ul( desii nu e sanatos poate sa
apara cazul acesta), o sa observam ca in view-ul parinte sau in _Layout,
ViewBag-ul nostru nu contine elementele pe care le-am adaugat.
Prima reactie este sa spunem ca este sa spunem ca este un bug.
Daca ne uitam putin peste cum functioneaza MVC 3 o sa descoperim ca de fapt la
partial view primeste propiul sau ViewBag.
Solutia pentru a rezolva aceasta problema este sa trasmitem
ViewBag-ul mai departe la partial view. Il putem trasmite ca si un
ViewDataDictionary, iar apoi in partial view sa il convertim spre un tip de
data dynamic.
Pagina principala:
@{Html.RenderPartial("Elaborate", Model, new ViewDataDictionary { {"vb", ViewBag}});}
….
@ ViewBag.Age=25;
Partial view:
@{
var viewBag = ((dynamic)ViewData["vb"]);
viewBag.Age = 20;
}
viewBag.Age = 20;
}
Ce parere aveti? Vedeti alte solutii?
Comments
Post a Comment