2010-11-24 7 views
7

My View hérite Models.MyModelObtenir modèle associé correspondant Voir dans HtmlHelper

<%@ Page Language="C#" MasterPageFile="Something.Master" Inherits="Models.MyModel>" %> 

J'ai besoin d'une propriété Model.Something être disponible dans une méthode HtmlHelper quand je l'appelle de ce point de vue.

<%= Html.CustomHelper(...) %> 

Y at-il un moyen d'accéder à cela? Peut-être via ViewContext ou ViewDataDictionary?

Je ne veux pas passer explicitement Model.SessionKey pour chaque assistant que j'appelle. Y a-t-il une approche que j'ai ratée? Ou est-ce impossible.

Merci.

Répondre

23

Mon approche à ceci serait d'avoir tous les modèles que vous voulez utiliser avec cette aide implémentent une interface qui définit leurs propriétés communes. La propriété ViewData de l'objet HtmlHelper a une propriété Model (de type object). À l'intérieur de votre assistant, vous pouvez lancer ceci comme type d'interface. En supposant qu'il ne soit pas nul à ce stade, c'est-à-dire, en fait, pas null et du type correct, vous pouvez alors utiliser les propriétés communes.

public static string CustomerHelper(this HtmlHelper helper, ...) 
{ 
    var model = helper.ViewData.Model as ISessionModel; 

    var sessionKey = model.SessionKey; 

    ... 
} 
+0

@Timothy: Thankyou. Essayer cela tout de suite! –

4

De même, vous pouvez le faire:

public static string CustomerHelper(this HtmlHelper helper, ...) 
{ 
    ISessionModel model = helper.ViewData.Model; 

    var sessionKey = model.SessionKey; 

    ... 
} 

La seule différence est que vous ne devez pas faire un casting ....

+0

Sûrement cela ne compile pas, vous êtes * implicitement * en train de lancer 'object' à' ISessionModel'? –

Questions connexes