How do I set ViewBag properties on _ViewStart.cshtml?

razor

Solution

There are two way to do this:

Use the `PageData` property (it's something more applicable to ASP.NET WebPages and seldom used in MVC)

Set:

@{
    PageData["message"] = "Hello";
}

Retrieve

<h2>@PageData["message"]</h2>

Try to find the view instance (the code is a bit dirty, but it does give you access directly to `ViewBag`/`ViewData`

Set:

@{
    var c = this.ChildPage;
    while (c != null) {
        var vp = c as WebViewPage;
        if (vp != null) {
            vp.ViewBag.Message = "Hello1";
            break;
        }
        c = c.ChildPage;
    }
}

Retrieve: as per usual

<h2>@ViewBag.Message</h2>

Problem

I have a specific ViewBag property that I would like to set at the ViewStart level. Ideally, I would like to be able to override that property on a page basis, if necessary. Is this possible? If so, how do I access the ViewBag property within a ViewStart page?

Original source