如何将主页中的函数调用到c#中的新形式

时间:2012-05-21 10:19:59

标签: c# asp.net

我有一个包含DropDownList的母版页。我有一个用于绑定主列表中的列表的函数,它可以正常工作。

我的问题是:如何从表单中调用该母版页功能,该表单不是上述母版页的子代

7 个答案:

答案 0 :(得分:2)

请在此处查看article

这是来自ASP.NET 2.0中的新编译模型的好东西。假设您将自定义属性添加到母版页代码隐藏文件中,如下所示:

partial class otcMaster : System.Web.UI.MasterPage
{

public string FooterText {
    get { return Footer.Text; }
    set { Footer.Text = value; }
}

 }

您可以使用继承的Master属性访问Web表单的母版页,该属性返回MasterPage引用。要获取otcMasterPage中定义的属性,您可能认为需要使用强制转换。

((otcMaster)Master).FooterText == "foo"

在使用框架和静态类型语言时,转换为派生类型只是生活的一部分,但有更好的方法。在ASPX中使用@ MasterType指令。

<%@ MasterType VirtualPath="~/otc.master"  %>

现在,当ASP.NET代码化页面时,它将以下内容放入部分类定义中。注意Shadows关键字(这将是分号土地中的新关键字[是的,我正在尝试替代语言])。

public new otc Master {
get { return (otcMaster)base.Master; }
}

结果是一个强类型的母版页。我们不需要演员,我们可以直接进入Master.FooterText属性。另一种方法是在@MasterType指令中指定TypeName。

答案 1 :(得分:1)

MasterPage中提供公开方法,然后您需要将ContentPage的Master属性转换为适当的类型:

public void DataBindDropDowns()
{
    // ...
}

然后您可以通过以下方式从ContentPages中调用它(假设您的母版页的类型称为SiteMaster

((SiteMaster)this.Page.Master).DataBindDropDowns();

修改

  

...上述母版页的不是孩子

我认为这意味着它不是那个师的ContentPage,我是对的吗? 然后,当<:p>时,无法获得对主的引用,但除外

  • 主人的方法是静态的,在这个用例中不可能,因为你想绑定主人的控件
  • 您有一个主人属于该类型的页面的引用,但再次不可能,因为当前HTTP-Handler是另一个不使用此主人的页面

注意主页实际上是ContentPage的子项并将与其合并。无法获得对不存在的对象的引用!

来自MSDN

  

请注意,母版页将成为内容页面的一部分。在   效果,母版页的作用与用户控件的行为方式大致相同    - 作为内容页面的子项和该页面中的容器。

答案 2 :(得分:0)

将它放在您的页面代码中(MyMasterPage是您的主页对象):

MyMasterPage masterPage = (MyMasterPage) this.Master;

masterPage.MyBindDropDownListFunction(); // Replace with your public function name

答案 3 :(得分:0)

您需要引用母版页属性,强制转换为母版页类型并调用您的方法。

((MyMasterPage)this.Master).MyBindingFunction();

答案 4 :(得分:0)

如果您经常制作,则可以创建一个BasePageSystem.Web.UI.Page派生,并将其用作表单的bage页面。

在那里,您可以添加主页类型的属性,以便您访问母版页的所有公共成员。

如果您掌握的网页课程为Site1,则可以在BasePage中执行此类操作。

public class BasePage : System.Web.UI.Page
{
    protected Site1 Site1Master
    {
        get { return Master as Site1; }
    }
}

然后在您需要访问母版页的方法的页面中替换:

    public partial class DefaultPage : System.Web.UI.Page

    public partial class DefaultPage : BasePage

然后您将在页面中提供Site1Master属性,您可以使用以下任何公共成员:

  Site1Master.MyBindingFunction(...);

您还可以在BasePage中添加任何其他所需功能。

注意:如果要确保页面中的属性不为空,可以添加一个检查以查看该页面是否具有Site1主页,如下所示:

    protected Site1 Site1Master
    {
        get 
        { 
           if (!(Master is Site1))
              throw new Exception("This page doesn's have Site1 as master page");
           return Master as Site1; 
        }
    }

答案 5 :(得分:0)

为了访问母版页的成员,在页面内容上公开了一个主属性。 首先,您需要指定@ MasterType指令:

<%@ Page  masterPageFile="~/MasterPage.master"%>
<%@ MasterType  virtualPath="~/MasterPage.master"%>

然后在母版页中创建公开功能,在您的内容页面中,您只需致电

Master.MethodNameInMaster()

答案 6 :(得分:0)

为了更好的设计,请使用EventAggregator模式。创建自定义事件并在母版页中处理它。