Можно ли вызвать панель обновления из выпадающего списка в пользовательском элементе управления? - PullRequest
0 голосов
/ 23 марта 2010

У меня есть пользовательский элемент управления на главной странице с двумя выпадающими списками. Когда пользователь выбирает элемент из любого ddl, я хочу загрузить определенный пользовательский элемент управления в панели обновлений на странице содержимого. Я не могу понять, как заставить пользовательский элемент управления вызывать панель обновления. Любые предложения очень ценятся.

Master

    <%@ 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 ]

2 голосов
/ 23 марта 2010

Если вы хотите обновить панель с помощью созданного вами пользовательского элемента управления, попробуйте установить UpdateMode = Conditional в UpdatePanel.Затем в событии клика вашего пользовательского элемента управления (или в любом другом событии) будет что-то вроде этого:

 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 голос
/ 23 марта 2010

Попробуйте добавить триггер обратной передачи на панель UpdatePanel:

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