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)
有没有办法访问这个?也许通过ViewContext
或ViewDataDictionary
?
我不想为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)
同样你可以这样做:
public static string CustomerHelper( this HtmlHelper helper, ... )
{
ISessionModel model = helper.ViewData.Model;
var sessionKey = model.SessionKey;
...
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是你不需要演员......