是否可以从内容页面重新绑定转发器(在母版页内)?
我的页面基于主页面和内容页面,我有一些下载文件的链接(锚点)!
点击这些链接后,page_load的内容页面将会触发,并显示下载窗口 但是我们永远不会得到母版页的page_Load,而在母版页中,我有一个显示下载次数的摘要 如何在显示下载窗口之前从内容页面重新绑定该摘要(在母版页内)?
答案 0 :(得分:2)
是。您可以使用this.Master
从Web表单访问母版页 - 然后您必须将其作为适当的类型进行投射。从那里,您可以访问您定义的任何公共方法或属性。
简单地在那里添加ReBind
方法,做你想做的事情,你应该好好去。
修改强>
这将是:
(this.Master as WhateverTypeYourRealMasterPageIs).ReBind();
答案 1 :(得分:2)
是的,这很简单。您可以从内容页面“找到”控件。 这是我绑定到GridView控件的示例。
站长:
<asp:GridView runat="server" ID="gridViewMaster" AutoGenerateColumns="true" />
内容页面:
var gridView = (GridView) Master.FindControl("gridViewMaster");
gridView.DataSource = dt;
gridView.DataBind();
只需用您的转发器替换网格视图对象和控件ID ...并将其绑定到您想要的任何对象。
编辑 - 这是找到服务器端div的代码:
var divMaster = (System.Web.UI.HtmlControls.HtmlGenericControl)Master.FindControl("divMaster");
divMaster.InnerHtml = "<h2>Hello World</h2>";
答案 2 :(得分:1)
这样做的正确方法是让用户控件触发Master页面订阅的事件。如果您需要一些示例代码,请告诉我
一些示例代码:
在您的用户控件中,添加以下事件:
公共事件EventHandler RefreshRequested;
用户控件将在需要刷新时通过调用以下方法抛出此事件:
private void OnRefreshRequested()
{
//make sure the event is being listened to. no point raising an event if no one cares!
if (this.RefreshRequested != null)
{
this.RefreshRequested(this, EventArgs.Empty);
}
}
现在,母版页将订阅用户控件的事件并相应地执行操作。订阅该事件就像订阅任何其他事件(即:Button_Click)。
让我知道这是否可以解决问题。
答案 3 :(得分:1)
您可以将母版页控件公开给孩子。使用母版页中的访问者公开控件...例如:
public Repeater MasterpageRptr {get;set;}
然后在您的子页面上添加MasterType定义:
<%@ Page Language="C#" Title="Content Page" MasterPageFile="~/MyMaster.master"%>
<%@ MasterType TypeName="MyMaster" %>
(where MyMaster is the master page class file)
然后,您可以使用访问者在您的子代码隐藏中调用它。
如果有帮助,请投票。