2010-03-23 2 views
0

J'ai un contrôle utilisateur dans une page maître avec deux listes déroulantes. Lorsque l'utilisateur sélectionne un élément parmi les deux ddl, je souhaite charger un contrôle utilisateur spécifique dans un panneau de mise à jour de la page de contenu. Je ne peux pas comprendre comment obtenir le contrôle de l'utilisateur pour déclencher le panneau de mise à jour. Toutes les suggestions sont très appréciées.Puis-je déclencher un panneau de mise à jour à partir d'une liste déroulante dans un contrôle utilisateur?

Maître

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

User Control

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

Contenu de la page

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

Cela dépendra de vous dire à utiliser chilren comme déclencheurs (qui est par défaut) ou non. Que diriez-vous de poster du code afin que nous puissions mieux vous aider. – Middletone

+0

Ok, j'ai ajouté un code de base qui, je l'espère, aide à exprimer le scénario. – MisterIsaak

Répondre

2

Si vous souhaitez mettre à jour le volet l via le contrôle utilisateur que vous avez créé, vous pouvez essayer de configurer le UpdateMode = Conditional du UpdatePanel. Ensuite, dans votre événement click User Control (ou tout autre événement), quelque chose comme ceci:

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

MISE À JOUR

Puisque vous ne pouvez pas accéder à vos déclencheurs déclarative, vous pouvez les ajouter à partir du code -derrière. Sur votre page de contenu, ajouter quelque chose comme ceci:

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

         UpdatePanel1.Triggers.Add(triggerUserControl); 

Faites la même chose pour l'autre DropDownList. Je n'ai pas essayé cela, mais cela semble raisonnable.

+0

Ok, je vois ce que vous faites et je pense que c'est proche de ce dont j'ai besoin. La disposition est inversée cependant. Mon contrôle utilisateur est sur la page maître et mon panneau de mise à jour est dans la page de contenu Web. – MisterIsaak

+0

Dans ce cas, dans votre code-behind MasterPage (pour l'événement de contrôle utilisateur), vous pouvez essayer: 'UpdatePanel mUpdatePanel = ContentPlaceHolder1.FindControl (" upContent ") comme UpdatePanel' – keyboardP

+0

J'ai mis à jour ma réponse en fonction de votre code . – keyboardP

1

Essayez d'ajouter un déclencheur à votre postback UpdatePanel:

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

Droit, mais comment puis-je trouver le ddl si c'est dans un contrôle utilisateur sur ma page maître? – MisterIsaak

Questions connexes