Jak radzić sobie z unikając ViewBag ze względu na jego ryzyko błędu z byciem dynamiczny, ale także uniknąć konieczności wypełnienia nowego ViewModel i przekazać je z powrotem do widoku za każdym razem. Na przykład, nie chcę koniecznie zmieniać śledzenie, aby ujawnić typowe dane normalnie zapakowane w ViewBag.Skutecznie unika ViewBag w ASP.NET MVC
[HttpGet]
void Index()
{
return View();
}
do
[HttpGet]
void Index()
{
var messages = new MessageCollection();
messages.AddError("Uh oh!");
return View(messages);
}
Gdzie w rurociągu chciałbym dodać obiekt jak ViewBag który jest zwyczaj i silnie wpisane ale mają to narażony elegancko w kontrolerze, a także widoku. Wolę to zrobić, kiedy nie potrzebują konkretnego ViewModel cały czas ...
[HttpGet]
void Index()
{
Messages.AddError("Uh oh!");
return View();
}
A na pierwszej stronie, zamiast @ ((IMessageCollection) ViewBag.Messages) .Errors id raczej coś w rodzaju @ Messages.Errors, które są mocno wpisane i dostępne wszędzie. Ponadto, nie chcę po prostu rzucić go w blok kodu na górze mojego widoku maszynki.
W WebForms, bym zrobił coś takiego umieścić tę stronę bazowej, a następnie mają usercontrol, które mogą ukryte lub wyświetlane na stronach, ile potrzeba. Po odłączeniu kontrolera od widoku nie jestem pewien, jak skopiować podobne zachowanie.
Czy to możliwe, czy to, co jest najlepsze podejście do projektowania?
Dzięki, Scott
Masz naprawdę 2 opcje do wyboru: ViewBag i dedykowana właściwość modelu –