如何从内容页面重新绑定转发器(内部母版页)?

时间:2011-11-14 20:32:07

标签: c# asp.net master data-binding

是否可以从内容页面重新绑定转发器(在母版页内)?
我的页面基于主页面和内容页面,我有一些下载文件的链接(锚点)!

点击这些链接后,page_load的内容页面将会触发,并显示下载窗口 但是我们永远不会得到母版页的page_Load,而在母版页中,我有一个显示下载次数的摘要 如何在显示下载窗口之前从内容页面重新绑定该摘要(在母版页内)?

4 个答案:

答案 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)

然后,您可以使用访问者在您的子代码隐藏中调用它。

如果有帮助,请投票。