2011-12-09 7 views
7

Desidero utilizzare il mio ViewBag nel mio _Layout, perché tutte le mie visualizzazioni hanno dati simili. Quindi, ecco quello che faccio:ViewBag restituisce null in Extension Class

a mio avviso:

ViewBag.MetaKeywords = Model.MetaKeywords 

Ho un classe di estensione binded sulla HtmlHelper

public static string MetaKeywords(this HtmlHelper helper) 
{ 
    return helper.ViewContext.Controller.ViewBag.MetaKeyWords; 
} 

E nella mia _Layout:

@Html.MetaKeywords() 

Il problema è il mio metodo di estensione restituisce null. Perché utilizzo un metodo di estensione anziché @ViewBag.MetaKeyWords? Perché alcune altre funzioni hanno una logica e vogliamo condividerla tra noi stessi.

Grazie per il vostro aiuto.

+3

Si sta impostando 'ViewBag.MetaDescription' ma si sta tentando di accedere a' ViewBag.MetaKeyWords' nel proprio helper. Si tratta di un refuso nel codice di esempio? Perché i nomi delle proprietà devono corrispondere. – nemesv

+0

Spiacente, ho fatto un errore nel mio post, l'ho modificato e quindi il mio problema persiste. – dlanglois6

risposta

5

Quando si usano le proprietà Razor ViewBag/ViewData che sono stati fissati in Vista è possibile accedere con helper.ViewData invece di helper.ViewContext. ...:

public static string MetaKeywords(this HtmlHelper helper) 
{ 
    return (string) helper.ViewData["MetaKeyWords"]; 
} 

Nota: Il ViewBag è solo un involucro dinamico attorno al dizionario ViewData.

Oppure se si esegue il ViewBag.MetaKeywords = Model.MetaKeywords nel controller, anche il metodo di estensione originale dovrebbe funzionare.

+0

Questo è esattamente ciò di cui avevo bisogno! Non riesco a ricordare dove, ma qualcosa mi ha suggerito di utilizzare helper.ViewContext per accedere al ViewBag, che non era corretto, quindi GRAZIE !! – Campbeln

Problemi correlati