2011-01-28 11 views
22

Mam określoną właściwość ViewBag, którą chciałbym ustawić na poziomie ViewStart. Idealnie byłoby, gdyby w razie potrzeby można było przesłonić tę właściwość na stronie. czy to możliwe? Jeśli tak, w jaki sposób uzyskać dostęp do właściwości ViewBag na stronie ViewStart?Jak ustawić właściwości ViewBag na _ViewStart.cshtml?

+0

Zobacz poprawioną odpowiedź. – marcind

Odpowiedz

10

Istnieją dwa sposoby to zrobić:

  1. Użyj właściwości PageData (to coś bardziej do ASP.NET stron internetowych i rzadko stosowane w MVC)

    • Set:

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

      <h2>@PageData["message"]</h2> 
      
  2. Spróbuj znaleźć instancję widzenia (kod jest nieco brudna, ale to nie daje dostęp bezpośrednio do ViewBag/ViewData

    • Komplet:

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

      <h2>@ViewBag.Message</h2> 
      
+0

To niefortunne. Filtr akcji nie ma sensu w mojej sytuacji. Chciałem ustawić właściwość, która mówi układowi, które menu jest aktywne. Chyba po prostu dodaję właściwość do każdej strony. –

+0

@ Jim Byłem zbyt szybki. Zobacz poprawioną odpowiedź. – marcind

+0

ViewPage jest analogiczny do SessionVar, który przykleja się do strony zamiast do sesji? – justSteve

Powiązane problemy