2012-04-23 63 views
1

我有一个masterpage(myMaster)我有一个变量(让我们调用myInteger)我想在外部类中访问。从母版页获得价值到类

通常我只是做在我的aspx:<%@ VirtualPath的MasterType = “myMaster.master” %>

,然后我可以访问它在我的代码做背后:Master.myInteger ...

我在这里的问题是,我想访问它的另一个类(那里没有的.aspx)

我试着做 Master.MasterPageFile = “〜/ myMaster.master” Master.AppRelativeVirtualPath =“myMaster。主“

但是Master.myInteger未被识别。

我不知道我想要做什么是可能的...任何想法得到这个变量?

+0

在别处定义财产。你试图做的不是最佳实践。 – Khan 2012-04-23 14:48:16

回答

0

从外部类,尝试这样的事情:

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    var value = ((MasterPageName)page.Master).SomeProperty; 
} 

如果你没有从外部类访问母版页,你可以使用反射来访问属性或方法:

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    var value = page.Master.GetType().GetProperty("SomeProperty").GetValue(page.Master, null); 
} 
+0

Thx但我不确定明白(英语不是我的母语:p)。我应该在哪里写<%@ MasterType VirtualPath =“〜/ Themes/Default.master”%>?而virtualPath应该包含哪些内容? – blop 2012-04-23 14:56:40

+0

在页面指令中(位于最上方),在页面声明下方:'<%@ Page Language =“C#”...%>' – 2012-04-23 15:16:41

4

所以你需要引用一个MasterPage的属性从一个类不会继承Page

我会建议使用一个属性或构造函数用这个值初始化这个类。但是,如果你真的需要这种方式,你可以试试下面的方法,它使用HttpContect.Current.Handler

// works even in static context 
static void foo() 
{ 
    int myInteger = -1; 
    var page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page; 
    if(page != null) myInteger = ((myMaster)page.Master).myInteger; 
} 

注意,这是容易出错,也难以您的类与MasterPage联系。

+0

Thanx,但我不确定如何使用属性...(我开始用.Net ...)。你能更具体吗? – blop 2012-04-23 15:10:24

+0

@blob:很难说,因为你没有显示你的课程。例如从一个页面:'Foo foo1 = new Foo(); foo1.myInteger =((myMaster)page.Master).myInteger;'(假设你的类有一个myInteger属性)。 – 2012-04-23 15:17:34