Asp.net 我可以从用户控件中的下拉列表触发更新面板吗

Asp.net 我可以从用户控件中的下拉列表触发更新面板吗,asp.net,asp.net-ajax,user-controls,updatepanel,Asp.net,Asp.net Ajax,User Controls,Updatepanel,我在母版页中有一个用户控件,其中有两个下拉列表。当用户从任意一个ddl中选择一个项时,我想在内容页的更新面板中加载一个特定的用户控件。我不知道如何让用户控件触发更新面板。非常感谢您的任何建议 掌握 <%@ Register src="toolbar.ascx" tagname="toolbar" tagprefix="uc1" %> <head id="Head1" runat="server"> </head> <body> &l

我在母版页中有一个用户控件,其中有两个下拉列表。当用户从任意一个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>

DDL 1
DDL 2
内容页

<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>

?????????????????????????????????

如果要通过创建的用户控件更新面板,可以尝试设置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);
更新

因为您不能声明性地访问触发器,所以可以从代码后面添加它们。在内容页上,添加如下内容:

 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执行相同的操作。我没有尝试过,但它似乎是合理的。

如果您想通过创建的用户控件更新面板,可以尝试设置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);
更新

因为您不能声明性地访问触发器,所以可以从代码后面添加它们。在内容页上,添加如下内容:

 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执行相同的操作。我没有尝试过这个,但它似乎是合理的。

尝试在UpdatePanel中添加回发触发器:

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

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

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


好的,我知道你在做什么,我认为这接近我需要的。不过,布局有所改变。我的用户控件在母版页上,我的updatepanel在web内容页上。在这种情况下,在母版页代码隐藏(对于用户控件事件)中,您可以尝试:
updatepanel mUpdatePanel=contentPlaceholder 1.FindControl(“upContent”)作为updatepanel
Ok我知道您在做什么,我认为它接近我需要的。不过,布局有所改变。我的用户控件在母版页上,我的updatepanel在web内容页上。在这种情况下,在母版页代码隐藏(对于用户控件事件),您可以尝试:
updatepanel mUpdatePanel=contentPlaceholder 1.FindControl(“upContent”)作为updatepanel
对,但是,如果ddl位于母版页上的用户控件中,我如何查找该ddl?是的,但是如果ddl位于母版页上的用户控件中,我如何查找该ddl?这将取决于您告诉它是否使用chilren作为触发器(默认情况下是这样)。发布一些代码,这样我们可以更好地帮助您。好吧,我添加了一些基本代码,希望这些代码能够帮助您表达场景。这取决于您是否告诉它使用chilren作为触发器(默认情况下是这样的)。发布一些代码,这样我们可以更好地帮助您。好的,我添加了一些基本代码,希望能帮助您表达这个场景。