情况如下:
我有一个全局使用的抽象类,用于通过公共属性引用Session变量。我们现在想要更改其行为以返回母版页上的属性。
(通过简单地更改此特定属性的内容,我们希望避免进行大量重写)
这只是该课程的片段:
public abstract class AppSession
{
public static CaseNumber CurrentCaseNo
{
/* OLD METHOD DELETED */
get
{
if (CurrentPage.Master != null)
// property on the master page
return CurrentPage.Master.CurrentCaseNo;
else
throw new Exception("This page has no master page");
}
}
}
上面,“CurrentPage”不是真实/有效的。我只是写那里显示上下文。
这甚至可能吗?
谢谢! Ĵ
答案 0 :(得分:2)
查看HttpContext.Current
对象。我相信它的Handler
属性将返回当前正在执行的页面。读取存储在会话中的值会更容易将其拉出属性,因为会话可以从HttpContext.Current
开始。
答案 1 :(得分:1)
在David's answer上构建,可以在整个应用程序中静态使用:
Page myPage = System.Web.HttpContext.Current.CurrentHandler as Page;
if( myPage != null )
return ((MyMaster)myPage.Master).CurrentCaseNo;
答案 2 :(得分:0)
我认为你需要使用带有“页面”对象作为参数的东西,然后你可以确定传递的页面是否是你的母版页。并从那里做你需要的......
但这增加了相当多的开销。
这里真正的问题是你想避免什么?试图摆脱会话并转移到viewstate?