如何在 c# 中将函数从母版页调用到新窗体中
本文关键字:新窗体 窗体 调用 函数 母版页 | 更新日期: 2023-09-27 18:34:53
我有一个包含DropDownList
的母版页。我有一个用于在主控文件中绑定列表的函数,它工作正常。
我的问题是:我将如何从窗体调用该母版页函数,该窗体不是上述母版页的子项
请参阅此处的文章。
这是来自 ASP.NET 2.0 中的新编译模型的一些好处。假设您将自定义属性添加到母版页代码隐藏文件,如下所示:
partial class otcMaster : System.Web.UI.MasterPage
{
public string FooterText {
get { return Footer.Text; }
set { Footer.Text = value; }
}
}
可以使用继承的 Master 属性访问 Web 窗体的母版页,该属性返回母版页引用。但是,要访问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。
在MasterPage
中提供一个公共方法,然后您需要将 ContentPage 的 Master
属性强制转换为适当的类型:
public void DataBindDropDowns()
{
// ...
}
然后,您可以通过以下方式从内容页面调用它(假设母版页的类型称为SiteMaster
:
((SiteMaster)this.Page.Master).DataBindDropDowns();
编辑:
。不是上述母版页的子级
我想这意味着它不是那个师父的ContentPage
,对吗?然后,无法获取对主节点的引用,除非:
- master
- 的方法是静态的,在这个用例中是不可能的,因为您想在 master 上绑定控件
- 您引用了该主页属于该类型的页面,但同样不可能,因为当前
HTTP-Handler
是另一个不使用此主页的页面
请注意,母版页实际上是ContentPage
的子级,并将与之合并。无法获取对不存在的对象的引用!
从 MSDN:
请注意,母版页将成为内容页的一部分。在 效果,母版页的行为方式与用户控件的行为方式大致相同 — 作为内容页面的子级和该页面中的容器。
您需要引用母版页属性,强制转换为母版页类型并调用方法。
((MyMasterPage)this.Master).MyBindingFunction();
把它放在你的页面代码中(其中MyMasterPage是你的母版页对象(:
MyMasterPage masterPage = (MyMasterPage) this.Master;
masterPage.MyBindDropDownListFunction(); // Replace with your public function name
如果您非常频繁地制作它,您可以创建一个派生自System.Web.UI.Page
的BasePage
,并将其用作表单的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(...);
您还可以在基本页面中添加任何其他所需的功能。
注意:如果要确保页面中的属性不为 null,可以添加检查以查看页面是否具有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;
}
}
为了访问母版页的成员,页面内容上公开了一个主属性。首先,您必须指定 @ MasterType 指令:
<%@ Page masterPageFile="~/MasterPage.master"%>
<%@ MasterType virtualPath="~/MasterPage.master"%>
然后在母版页中创建一个公共函数,并在内容页中调用
Master.MethodNameInMaster()
为了更好的设计,请使用事件聚合器模式。创建自定义事件并在母版页中处理它。