我有一个包含DropDownList
的母版页。我有一个用于绑定主列表中的列表的函数,它可以正常工作。
我的问题是:如何从表单中调用该母版页功能,该表单不是上述母版页的子代
答案 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)
如果您经常制作,则可以创建一个BasePage
从System.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模式。创建自定义事件并在母版页中处理它。