2014-06-22 11 views
20

Che cos'è ViewBag.Title in ASP.NET MVC 4?Che cos'è ViewBag.Title in Razor?

ho che Visualizza File:

@model IEnumerable<MvcMusicStore.Models.Genre> 

@{ 
    ViewBag.Title = "Store"; 
} 

<h2>Index</h2> 

e non so che cosa cambia ViewBag.Title può realizzare.

+0

È una proprietà dinamica normale in 'ViewBag', che può essere utilizzata dal layout. – SLaks

risposta

34

Dal ASP.NET site: ViewBag

è un oggetto dinamico, il che significa che si può mettere quello che vuoi ad esso; l'oggetto ViewBag non ha proprietà definite finché non si inserisce qualcosa all'interno di .

La proprietà ViewBag.Title è semplicemente un oggetto stringa. In questo caso viene utilizzato nella vista per effettivamente definire la proprietà Title. Se si dovesse guardare nel file _Layout.cshtml si sarebbe probabilmente vedere qualcosa di simile:

<title>@ViewBag.Title</title> 

Ricordate quando la proprietà è stata definita nella vista? Quando la pagina viene finalmente visualizzata, tale proprietà termina con il codice HTML simile a:

<title>Store</title> 

Quale imposta il titolo del browser.

+2

Fa tutto ciò che voglio significa anche mettere un oggetto complesso in esso? So che questo dovrebbe essere fatto passando l'oggetto al modello, ma è fattibile? – Yoda

4

ViewBag è un oggetto dinamico in modo che sia possibile definire qualsiasi proprietà su di esso. In questo caso @ViewBag.Title viene assegnata una stringa. Nella pagina _Layout.cshtml si vedrà questa riga di codice:

<title>@ViewBag.Title</title> 

Qualsiasi vista, che sta utilizzando il _Layout.cshtml come il layout avrà una riga di codice simile al di sotto:

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

Se avete fatto che , questo è alla fine quello che si compirà (vedi cerchio rosso) che mostra il titolo della pagina nel browser:

enter image description here


In uno dei vostri commenti vi chiedo:

fa quello che voglio dire anche mettere un oggetto complesso in esso? So che questo dovrebbe essere fatto passando l'oggetto al modello, ma è fattibile?

In altre parole, si sta chiedendo se è possibile inserire un oggetto complesso nella proprietà Title? Sì, puoi farlo, ma tieni presente di modificare il codice nel file _Layout.cshtml, altrimenti chiamerà semplicemente ToString() sul tuo oggetto complesso e stamperà il risultato nel titolo del browser. Ma perché lo faresti? Io non lo suggerisco. Ma sì, puoi inserire qualcosa perché è dinamico, ma devi usarlo correttamente.È anche possibile creare altre proprietà come questa:

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

Tuttavia, il superamento di un modello è molto meglio perché ti dà compilatore supporto e si riceverà anche Intellisence.