www visual update tools studio packs net mvc4 mvc language instalar asp asp.net-mvc-3 razor

asp.net mvc 3 - visual - ¿Por qué no_ViewStart.cshtml puede acceder al objeto ViewBag?



mvc 4+ (6)

En resumen ... Utilice la bolsa de visualización del controlador.

ViewContext.Controller.ViewBag.MyVar = "myVal";

y

@ViewContext.Controller.ViewBag.MyVar

=============================================== =============

Hay buena información aquí: http://forums.asp.net/post/4254825.aspx

=============================================== =============

Generalmente, ViewData ["StoreName"] es igual que ViewBag.StoreName

Además, Controller.ViewData ["StoreName"] = Controller.StoreName = ViewContext.Controller.ViewBag.StoreName = ViewContext.Controller.ViewData ["StoreName"]

Pero cada vista y vista parcial obtiene su propia instancia de viewdata.

http://jeffreypalermo.com/blog/viewdata-mechanics-and-segmentation-excerpt-from-asp.net-mvc-in-action/

=============================================== =============

Hay otra solución aquí: https://stackoverflow.com/a/4834382/291753

=============================================== =============

Tengo el _ViewStart.cshtml predeterminado en mi carpeta / Views. Me gustaría poder acceder a mi objeto ViewBag para poder establecer el título predeterminado para todas mis vistas.

Sin embargo, con:

@{ Layout = "~/Views/Shared/SiteLayout.cshtml"; ViewBag.Title = "bytecourse - Online Courses in Technology"; }

Me sale "El nombre ''ViewBag'' no existe en el contexto actual" como un error de tiempo de ejecución.

¿Que necesito hacer?



Puede crear una página de diseño que esté utilizando sus datos de Viewbag y agregar diseño a su página _ViewStart en blanco; funcionará

en ViewStart.cshtml

@{ Layout = "~/Views/Shared/_Layout.cshtml"; }


Puede lograr esto usando vistas parciales. Coloque todo su código común relacionado con el Título en una vista parcial llamada Title.cshtml en la carpeta compartida. En _viewstart simplemente llame a la Vista parcial.

_ViewStart.cshtml :

@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @Html.Partial("Title")

~ / Shared / Title.cshtml :

@{ ViewBag.Title = "bytecourse - Online Courses in Technology"; }


Puede usar secciones en su _Layout si desea establecer un título predeterminado:

<title> @if (IsSectionDefined("Title")) { @RenderSection("Title") } else { @:bytecourse - Online Courses in Technology } </title>

y dentro de las vistas puede anularlo:

@section Title { Overriden title }

Una razón más para no usar ViewBag :-)


hmm, puede acceder a ViewBag a través de ViewData, por ejemplo, ViewContext.ViewData["Title"] .

Por lo tanto, si establece los datos de ViewBag en un filtro de acción, por ejemplo, puede sacarlos de _ViewStart.cshtml usando ViewContext.ViewData["Title"] .

Pero traté de asignar un valor usando ViewContext.ViewData["Key"] = value; y no parece persistir en la vista real.