2

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

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

4

4 回答 4

2

是的。您可以使用 Web 表单访问母版页,this.Master然后您必须将其转换为适当的类型。从那里您可以访问您定义的任何公共方法或属性。

简单地在ReBind那里添加一个方法来做你想要的,你应该很高兴。

编辑

它会是这样的:

(this.Master as WhateverTypeYourRealMasterPageIs).ReBind();

于 2011-11-14T20:36:02.350 回答
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>";
于 2011-11-14T21:02:50.103 回答
1

这样做的正确方法是让用户控件触发母版页订阅的事件。如果您需要一些示例代码,请告诉我

一些示例代码:

在您的用户控件中,添加以下事件:

公共事件 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)一样。

让我知道这是否可以解决问题。

于 2011-11-14T20:34:57.110 回答
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)

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

.

.

如果有帮助请投票。

于 2011-11-14T20:38:19.647 回答