2010-11-24 10 views
7

Mi Ver hereda Models.MyModelConsiga el modelo asociado con la correspondiente vista en HtmlHelper

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

necesito una propiedad Model.Something a estar disponible en un método HtmlHelper cuando llamo desde este punto de vista.

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

¿Hay alguna forma de acceder a esto? ¿Tal vez a través de ViewContext o ViewDataDictionary?

No quiero pasar explícitamente Model.SessionKey por cada ayuda que llamo. ¿Hay algún enfoque que eché de menos? O es esto imposible.

Gracias.

Respuesta

23

Mi enfoque para esto sería tener todos los modelos que desea utilizar con este ayudante implementar una interfaz que defina sus propiedades comunes. La propiedad ViewData en el objeto HtmlHelper tiene una propiedad Model (del tipo object). Dentro de tu ayudante, puedes convertir esto como el tipo de interfaz. Suponiendo que no es nulo en ese punto, es decir, que en realidad no es nulo y del tipo correcto, puede usar las propiedades comunes.

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

    var sessionKey = model.SessionKey; 

    ... 
} 
+0

@Timothy: Gracias. ¡Intentando esto de inmediato! –

4

mismo modo se puede hacer esto:

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

    var sessionKey = model.SessionKey; 

    ... 
} 

La única diferencia es que usted no tiene que hacer un reparto ....

+0

Seguramente esto no compila, ¿estás * implícitamente * lanzando 'object' a' ISessionModel'? –

Cuestiones relacionadas