母版页调用内容页的方法的简单实现
2012-02-28 08:55
483 查看
在内容页中如何调用母版页上的内容大家想必都已经知道,这里我也不再啰嗦。我想介绍给大家的方法是如何在母版页中如何调用内容页的方法。
母版页给我们带来了很多方便性,但也带来了一个问题:在设计母版页的时候,总会碰到需要在母版页中调用内容页的方法,但此时内容页尚未设计,如何调用呢?下面就让我用一个实例给大家讲解一下:
母版页:MasterPage.master的页面代码如下:
<body>
<form id="form1" runat="server">
<table>
<tr>
<td>
<asp:Button ID="CallContentMethod" runat="server" OnClick="CallContentMethod_Click"
Text="调用内容页方法" />
<asp:Label ID="welcomeMessage" runat="server" Text="这里将显示内容页的欢迎信息"></asp:Label></td>
</tr>
<tr>
<td>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</td>
</tr>
</table>
</form>
</body>
其中有一个按钮和一个文本,其中的文本用来显示内容页的欢迎信息,按钮用来调用内容页的方法,但此时内容页并不存在,那么按钮的单击事件代码如何写呢?
这里我们需要引入一个页面基类的概念,想必大家都清楚;aspx页面只要求后台类是继承此Page类即可。所以我们先添加一个继承自Page的页面基类BasePage,然后让页面继承自我们BasePage并重写相关方法,利用运行时的动态性来解决此问题。相关代码如下:
BasePage.cs:
public class BasePage :Page
{
/// <summary>
/// 输出每个内容页的欢迎信息,内容页继承此类并重写此方法即可。此方法会由母版页自动调用
/// </summary>
public virtual string SayHello()
{
return "这是页面基类返回的欢迎信息!";
}
}
母版页的后台代码如下:
BasePage currentPage = null;
protected void Page_Load(object sender, EventArgs e)
{
currentPage = Page as BasePage;
}
protected void CallContentMethod_Click(object sender, EventArgs e)
{
if (currentPage != null)
{
welcomeMessage.Text = currentPage.SayHello();
}
}
此处母版页中定义一个成员变量指向BasePage,在PageLoad中将实际运行的页面进行转型,这样在按钮的单击事件中就可以调用BasePage定义的SayHello方法了。又由于此方法是虚方法,在运行时绑定具体方法,即可实现我们的要求。
下面是内容页的代码:
Default.aspx.cs:
//注意类一定要继承自自定义的基类,否则母版页中转型会失败
public partial class Template_Default : BasePage
//重写欢迎信息方法
public override string SayHello()
{
return "这是来自内容页的欢迎信息!";
}
。
通过以上的步骤,我们就可以轻松实现在母版页中调用内容页的方法。如果想自动调用,只需要在母版页的Page_Load方法中转型后直接调用相关方法即可。
如果大家有更好的方法欢迎一起讨论!!!
母版页给我们带来了很多方便性,但也带来了一个问题:在设计母版页的时候,总会碰到需要在母版页中调用内容页的方法,但此时内容页尚未设计,如何调用呢?下面就让我用一个实例给大家讲解一下:
母版页:MasterPage.master的页面代码如下:
<body>
<form id="form1" runat="server">
<table>
<tr>
<td>
<asp:Button ID="CallContentMethod" runat="server" OnClick="CallContentMethod_Click"
Text="调用内容页方法" />
<asp:Label ID="welcomeMessage" runat="server" Text="这里将显示内容页的欢迎信息"></asp:Label></td>
</tr>
<tr>
<td>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</td>
</tr>
</table>
</form>
</body>
其中有一个按钮和一个文本,其中的文本用来显示内容页的欢迎信息,按钮用来调用内容页的方法,但此时内容页并不存在,那么按钮的单击事件代码如何写呢?
这里我们需要引入一个页面基类的概念,想必大家都清楚;aspx页面只要求后台类是继承此Page类即可。所以我们先添加一个继承自Page的页面基类BasePage,然后让页面继承自我们BasePage并重写相关方法,利用运行时的动态性来解决此问题。相关代码如下:
BasePage.cs:
public class BasePage :Page
{
/// <summary>
/// 输出每个内容页的欢迎信息,内容页继承此类并重写此方法即可。此方法会由母版页自动调用
/// </summary>
public virtual string SayHello()
{
return "这是页面基类返回的欢迎信息!";
}
}
母版页的后台代码如下:
BasePage currentPage = null;
protected void Page_Load(object sender, EventArgs e)
{
currentPage = Page as BasePage;
}
protected void CallContentMethod_Click(object sender, EventArgs e)
{
if (currentPage != null)
{
welcomeMessage.Text = currentPage.SayHello();
}
}
此处母版页中定义一个成员变量指向BasePage,在PageLoad中将实际运行的页面进行转型,这样在按钮的单击事件中就可以调用BasePage定义的SayHello方法了。又由于此方法是虚方法,在运行时绑定具体方法,即可实现我们的要求。
下面是内容页的代码:
Default.aspx.cs:
//注意类一定要继承自自定义的基类,否则母版页中转型会失败
public partial class Template_Default : BasePage
//重写欢迎信息方法
public override string SayHello()
{
return "这是来自内容页的欢迎信息!";
}
。
通过以上的步骤,我们就可以轻松实现在母版页中调用内容页的方法。如果想自动调用,只需要在母版页的Page_Load方法中转型后直接调用相关方法即可。
如果大家有更好的方法欢迎一起讨论!!!
相关文章推荐
- 母版页调用内容页的方法的简单实现
- (转)母版页调用内容页的方法的简单实现
- 母版页调用内容页的方法的简单实现
- dede:list调用body内容的实现方法
- Vue中使用Froala Editor时,外部方法调用html.insert()插入内容到光标最后停留位置功能实现
- jQuery简单实现iframe的高度根据页面内容自适应的方法
- 访问母版页控件、属性、方法及母版页中调用内容页的方法
- jQuery简单实现点击文本框复制内容到剪贴板上的方法
- Function ALV 简单实现HTML抬头的方法 网上转载的稍微加了一点修改内容
- ASP.Net访问母版页(MasterPage)控件、属性、方法及母版页中调用内容页的方法
- java实现利用String类的简单方法读取xml文件中某个标签中的内容
- ASP.NET母版页中调用内容页的方法
- Vue中使用Froala Editor时,外部方法调用html.insert()插入内容到光标最后停留位置功能实现
- c# 动态加载dll文件,并实现调用其中的简单方法
- windows下简单的调用Setforegroundwindow并不能将窗口置最前,我找到三种方法可以实现该功能。
- 内容页中调用母版页控件一些方法总结
- 对代理模式中代理方法实现和调用的简单了解
- C语言MD5加密算法的简单调用实现(另附:Java/Python/Shell/Golang方法)
- Vue中使用Froala Editor时,外部方法调用html.insert()插入内容到光标最后停留位置功能实现
- jQuery简单实现iframe的高度根据页面内容自适应的方法