【问题标题】:how rebind a repeater (inside master page) from content page?如何从内容页面重新绑定转发器(母版页内)?
【发布时间】:2011-11-14 20:32:07
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    是的,这很简单。您可以从内容页面“找到”控件。 这是我绑定到 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>";
    

    【讨论】:

    • 亲爱的 Ed B,非常感谢。是否可以为服务器端 div 完成这项工作?
    • 是的,它的工作方式相同。只需将 div 添加到主控。然后在内容页面上找到它。我已经添加了代码来找到上面的服务器端 div
    • 我测试了,我试过了 > var SummaryContainer = Master.FindControl("SummaryContainer"); SummaryContainer.DataBind();但该 div 从未向我显示新结果,我应该单击页面中的按钮以获取结果。
    【解决方案2】:

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

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

    编辑

    应该是这样的:

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

    【讨论】:

    • 感谢所有答案/请给我一些代码!
    • 感谢编辑,WhateverTypeYourRealMasterPageIs -> 我怎么能找到它?我试过 (this.Master as MasterPage).ReBind();但有错误!
    • 转到母版页后面的代码。您应该能够在那里看到类名。这就是母版页类的类型。
    【解决方案3】:

    您可以向子级公开母版页控件。使用母版页中的访问器将控件公开...例如:

    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)
    

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

    .

    .

    如果有帮助请投票。

    【讨论】:

    • 感谢您的帮助。是否可以为服务器端 div 完成这项工作?
    【解决方案4】:

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

    一些示例代码:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多