是否有一种简单的方法来调用用于从父控件更改显示的方法?

时间:2014-05-02 09:48:56

标签: c# asp.net ajax asp.net-controls

我正在尝试使用Ajax标签和用户控件创建页面。 .aspx页面包含对默认控件的引用

<%@ Register src="~/Controls/DefaultControl.ascx" tagname="DefaultControl" tagprefix="uc1" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <uc1:DefaultControl ID="DefaultControl1" runat="server" />
    <%--<uc2:CorrespondenceControl ID="CorrespondenceControl" runat="server" />--%>
</asp:Content>

DefaultControl.ascx正在使用Ajax选项卡,其中一个包含更新面板中的子控件

asp:TabPanel ID="tbpnl2" runat="server" HeaderText="Tab With GridView with select buttons" Visible="True">
  <ContentTemplate>
    <asp:UpdatePanel ID="updpnl2" runat="server" UpdateMode="Conditional">
      <ContentTemplate>
        <uc2:Control1 ID="Control1" runat="server" />
      </ContentTemplate>
    </asp:UpdatePanel>
  </ContentTemplate>
</asp:TabPanel>

DefaultControl在代码隐藏页面中保存一个方法,该方法可以直接从DefaultControl.ascx页面上的其他选项卡(标记包含在DefaultControl.ascx中直接包含)成功调用,以在Gridview上单击Select时更改显示 -

public void ShowPage()
{
            gv1.DataBind();
            fv1.DataBind();
            tbpnl1.Visible = true; //show details tab
            tbpnl2.Visible = true;
            tab1.ActiveTabIndex = 1; //set details tab as current tab
            txt.Text = String.Empty;
            updPnl1.Update();
}

当我在那里选择了Gridview上的Select时,我试图从子控件1调用此方法,但显然没有引用的元素在Control1中。

我一直在寻找一种能够使用现有方法的方法,并且已经看到了许多建议,包括接口,引用如((DefaultControl)this.DefaultControl).ShowPage();关于Control1背后的代码

但是,由于我刚刚开始编程,我不知道如何实现任何这些解决方案或者应该使用什么语法来使它们工作。

在Ajax选项卡中包含的子控件中,是否有一种简单的,即使是脏的方法来使用父控件中的方法?

1 个答案:

答案 0 :(得分:0)

不确定这是否是您正在寻找的...下面的示例显示从网页调用 直接UserControl和嵌套的UserControl方法


Default.aspx的

<%@ Register TagPrefix="uc" TagName="WebUserControl" Src="WebUserControl.ascx" %>
<%@ Register TagPrefix="uc2" TagName="WebUserControl2" Src="WebUserControl2.ascx" %>
<form runat="server" id="form1">
    <uc:WebUserControl ID="control1" runat="server" />
    <hr />
    <h4>
        At Default.aspx</h4>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Call the function" />
</form>  

Default.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
{
    control1.CallMe();
    var control2 = (WebUserControl2)control1.FindControl("control2");
    control2.CallMe2();
}

WebUserControl.ascx

<%@ Register TagPrefix="uc2" TagName="WebUserControl2" Src="WebUserControl2.ascx" %>
<div runat="server">
    <h3>
        WebUserControl</h3>
    <asp:Label ID="lbl1" Text="I am ready at WebUserControl" runat="server"></asp:Label>
    <div runat="server" id="toAdd" style="color: Red;">
    </div>
</div>
<hr />
<uc2:WebUserControl2 ID="control2" runat="server" />  

WebUserControl.ascx.cs

public void CallMe()
{
    Label lbl = new Label();
    lbl.Text = "I am at WebUserControl";
    toAdd.Controls.Add(lbl);
}

WebUserControl2.ascx

<div runat="server">
    <h3>
        WebUserControl2</h3>
    <asp:Label ID="lbl1" Text="I am ready at WebUserControl2" runat="server"></asp:Label>
    <div runat="server" id="toAdd" style="color: Red;">
    </div>
</div>

WebUserControl2.ascx.cs

public void CallMe2()
{
    Label lbl = new Label();
    lbl.Text = "I am at WebUserControl2";
    toAdd.Controls.Add(lbl);
}  

希望它有所帮助...... !!