获取与HtmlHelper中相应View相关联的Model

Rob*_*ben 8 c# asp.net asp.net-mvc html-helper asp.net-mvc-3

我的视图继承 Models.MyModel

<%@ Page Language="C#" MasterPageFile="Something.Master" Inherits="Models.MyModel>" %>
Run Code Online (Sandbox Code Playgroud)

当我从这个视图中调用它时,我需要一个属性Model.Something才能在HtmlHelper方法中使用.

<%= Html.CustomHelper(...) %>
Run Code Online (Sandbox Code Playgroud)

有没有办法访问这个?也许通过ViewContextViewDataDictionary

我不想为Model.SessionKey我调用的每个帮助器显式传递.有没有我错过的方法?或者这是不可能的.

谢谢.

tva*_*son 28

我的方法是让你想要与这个帮助器一起使用的所有模型实现一个定义它们的公共属性的接口.HtmlHelper对象上的ViewData属性具有Model属性(类型object).在帮助程序中,您可以将其转换为接口类型.假设它在那一点上是非null的,即实际上不是null并且类型正确,那么你可以使用公共属性.

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

    var sessionKey = model.SessionKey;

    ...
}
Run Code Online (Sandbox Code Playgroud)


dev*_*ife 5

同样你可以这样做:

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

    var sessionKey = model.SessionKey;

    ...
}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是你不需要演员......