How do I set ViewBag properties on _ViewStart.csht

2019-01-18 09:53发布

问题:

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?

回答1:

There are two way to do this:

  1. 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>
      
  2. 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>
      


标签: razor