2010-09-06 82 views
0

我有a.master和b.aspx。访问函数在aspx页面到master页面

我在我的aspx页面有一些功能。

如何在a.master页面中访问该功能。

谢谢

+1

我不认为你真的可以打电话,它更好地把这个功能移动到一个类,并从女巫页你的类呼叫。 – Aristos 2010-09-06 06:14:38

回答

1

比方说,你想从b.aspx从a.master调用foo。所以首先是你已经使方法内部(或公共),然后你可以使用代码如下面的母版页是调用该方法。

var page = (b)this.Page; 
page.Foo(); 

请注意,b将是b.aspx中类名后面的代码。请注意,如果您使用另一个页面c.aspx并使用相同的主控件a,上述代码将失败。一般来说,我会说,从主站调用页面特定的函数是没有意义的,除非函数存在于某些基本页面类中,并且在这种情况下,您应该转换为该基本页面类。

编辑:由阿西要求更复杂的例子:

考虑您的内容页面b.aspx如

<%@ Page Language="C#" MasterPageFile="a.Master" Title="Page B" AutoEventWireup="true" 
    CodeBehind="b.aspx.cs" Inherits="YourProject.b" %> 

而在隐藏文件的代码(b.aspx.cs),你有a.master页的一个方法foo如

namespace YourProject 
{ 
    public partial class b : System.Web.UI.Page 
    { 
      void Foo(string someParameter) 
      { 
       Label1.Text = someParameter 
      } 
     ... 
    } 
} 

现在,在后面的代码(a.master.cs)

namespace YourProject 
{ 
    public partial class a : System.Web.UI.MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      b contentPage = (b)this.Page; 
      contentPage.Foo("Hello"); 
     } 

     .... 
    } 
} 
+0

这是一般的想法,但(b)无法从母版页找到...你做了测试看看? – Aristos 2010-09-06 06:15:12

+0

如果b.aspx使用母版页,则母版的Page属性将给出b页面对象的引用。这很简单,因为母版页只不过是实际页面上的控件。 – VinayC 2010-09-06 06:29:43

+0

这不起作用,你理论上讲,但你没有尝试。 – Aristos 2010-09-06 06:56:14

1

当然你可以在b.aspx方法是公共的调用它在a.master。不过,我建议你仔细考虑你的设计。因为它真的很奇怪,就像你从它的父类中调用一个子类的方法(尽管它在理论上是可能的)。您在修改之前,问自己:

Is it necessary to call this method in the master page? If yes, do I have a better place to put the method?

1

正如其他人所说,可以这样做。然而,这是一种奇怪的做事方式。你可能会做得更好,以不同的方式做你想做的事情。母版页面的整个构思是“包装”多种内容页面。如果你的内容页面没有你想要调用的功能呢?

你可以确保你的所有内容页面都有这个功能,但为什么不把它放在主页面呢?

也许如果你对你想要做的更好一点表示赞同,我们可以建议你以更好的方式处理事情。

0

要访问,或者:

  1. 作出这样的方法static方法。
  2. 将您的代码移动到App_Code文件夹中。
  3. 将您的代码移出您的Web项目,移入某个通用程序集并将其用作参考。