是否可以从用户控件的下拉列表中触发更新面板

时间:2010-03-23 19:49:01

标签: asp.net asp.net-ajax user-controls updatepanel

我在主页面中有一个用户控件,有两个下拉列表。当用户从ddl中选择一个项目时,我想在内容页面的更新面板中加载特定的用户控件。我无法弄清楚如何让用户控件来触发更新面板。任何建议都非常感谢。

    <%@ Register src="toolbar.ascx" tagname="toolbar" tagprefix="uc1" %>
<head id="Head1" runat="server">
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </asp:ToolkitScriptManager>
    </div>
    <uc1:toolbar ID="toolbar1" runat="server" />
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </form>
</body>
</html>

用户控制

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="toolbar.ascx.cs" Inherits="Blah.toolbar" %>
<asp:DropDownList ID="ddlDesiredPage" runat="server" AutoPostBack="True" 
            EnableViewState="True" 
            onselectedindexchanged="goToSelectedPage">
            <asp:ListItem Value="-">DDL 1</asp:ListItem>
        </asp:DropDownList>
        &nbsp;
<asp:DropDownList ID="ddlDesiredPageSP" runat="server" AutoPostBack="True" 
        EnableViewState="True"
        onselectedindexchanged="goToSelectedPage">
            <asp:ListItem Value="-">DDL 2</asp:ListItem>
</asp:DropDownList>

内容页面

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" onload="UpdatePanel1_Load">
        <ContentTemplate>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </ContentTemplate>
        <Triggers>
        ?????????????????????????????????
        </Triggers>
    </asp:UpdatePanel>
</asp:Content>

2 个答案:

答案 0 :(得分:2)

如果您想通过您创建的用户控件更新面板,可以尝试设置UpdatePanel的UpdateMode = Conditional。然后,在您的用户控件的单击事件(或任何一个事件)中,使用以下内容:

 UpdatePanel mUpdatePanel = this.Page.Master.FindControl("upContent") as UpdatePanel;  
    if (mUpdatePanel != null)  
    {
        mUpdatePanel.Update();  
    }
    else
    {
         //update panel not found
    }

<强>更新

由于您无法以声明方式访问触发器,因此可以从代码隐藏中添加它们。在您的内容页面上,添加以下内容:

 AsyncPostBackTrigger triggerUserControl = new AsyncPostBackTrigger();
                        DropDownList ucDDL = this.Page.Master.FindControl("ddlDesiredPage") as DropDownList;
                        triggerUserControl.ControlID = ucDDL.ID;
                        triggerUserControl.EventName = "Click";

                        UpdatePanel1.Triggers.Add(triggerUserControl);

对其他DropDownList执行相同操作。我没试过这个,但看起来很合理。

答案 1 :(得分:1)

尝试向UpdatePanel添加回发触发器:

<Triggers>
    <asp:PostBackTrigger ControlID="ddl..." />
</Triggers>