2014-06-22 10 views
20

Was ist ViewBag.Title in ASP.NET MVC 4?Was ist ViewBag.Title in Razor?

Ich habe diese Ansicht Datei:

@model IEnumerable<MvcMusicStore.Models.Genre> 

@{ 
    ViewBag.Title = "Store"; 
} 

<h2>Index</h2> 

und ich weiß nicht, was ViewBag.Title Veränderung erreichen kann.

+0

Dies ist eine reguläre dynamische Eigenschaft in 'ViewBag', die Ihr Layout möglicherweise verwendet. – SLaks

Antwort

34

Vom ASP.NET site:

ViewBag ist ein dynamisches Objekt, das bedeutet, können Sie setzen, was Sie um sie wollen; Das ViewBag-Objekt hat keine definierten Eigenschaften, bis Sie etwas in es setzen.

Die Eigenschaft ist einfach ein String-Objekt. In diesem Fall wird es in der Ansicht verwendet, um zu definieren die Title Eigenschaft. Wenn Sie in Ihrer _Layout.cshtml Datei suchen wären, würden Sie wahrscheinlich sehen so etwas wie:

<title>@ViewBag.Title</title> 

Denken Sie daran, wenn die Eigenschaft in der Ansicht definiert wurde? Wenn die Seite schließlich gerendert wird, endet diese Eigenschaft im HTML-Markup wie folgt:

<title>Store</title> 

Welche legt den Browsertitel fest.

+2

Macht was ich will auch ein komplexes Objekt? Ich weiß, dass dies geschieht, indem man Objekte an das Modell weitergibt, aber ist das machbar? – Yoda

4

ViewBag ist ein dynamisches Objekt, so dass Sie beliebige Eigenschaften definieren können. In diesem Fall wird @ViewBag.Title eine Zeichenfolge zugewiesen. In der _Layout.cshtml Seite finden Sie diese Codezeile sehen:

<title>@ViewBag.Title</title> 

Jede Ansicht, die die _Layout.cshtml als Layout eine einzige Zeile Code ähnlich wie unten wird verwendet:

@{ 
    // This is setting the property to Hahaha 
    ViewBag.Title = "Hahaha"; 
} 

Wenn du das getan hast , das ist schließlich, was Sie zeigt den Titel der Seite im Browser erreichen (den roten Kreis sehen):

enter image description here


In einem Ihren Kommentaren, die Sie fragen:

tut, was ich will, bedeuten auch ein komplexes Objekt in sie zu setzen? Ich weiß, dass dies geschieht, indem man Objekte an das Modell weitergibt, aber ist das machbar?

Mit anderen Worten fragen Sie, ob Sie ein komplexes Objekt in Title Eigenschaft setzen können? Ja, Sie können dies tun, aber denken Sie daran, den Code in der _Layout.cshtml Datei zu ändern, andernfalls wird einfach ToString() auf Ihrem komplexen Objekt aufgerufen und das Ergebnis im Browser-Titel gedruckt. Aber warum würdest du das tun? Ich schlage es nicht vor. Aber ja, du kannst etwas hineinlegen, weil es dynamisch ist, aber dann musst du es richtig benutzen.Sie können auch andere Eigenschaften wie folgt erstellen:

ViewBag.SomeOtherProperty = new MyClass() {...}; 

jedoch ein Modell vorbei ist viel besser, weil es Ihnen Unterstützung Compiler gibt, und Sie werden auch Intellisence bekommen.