2013-08-14 2 views
1

J'ai une application Web où j'essaie d'utiliser un contrôle utilisateur avec un UpdatePanel afin que le contrôle peut être mis à jour sur la page Web en utilisant une publication partielle.Les balises de serveur en ligne ont-elles été réévaluées lors de la publication partielle de UpdatePanel?

J'ai défini le ScriptManager dans la page principale du site. Il est en dehors de la ContentPlaceHolder mais à l'intérieur de la balise de formulaire pour le corps comme représenté ci-dessous:

<head>  
    <asp:ContentPlaceHolder ID="HeadContent" runat="server" /> 
</head> 
<body> 
    <form runat="server" class="form-horizontal"> 
     <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" /> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
</body> 

Dans la page de contenu que j'ai quelques HTML en utilisant les balises de serveur en ligne pour se lier aux données et un contrôle utilisateur qui contient les UpdatePanel comme représenté ci-dessous:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="ClientDetail.aspx.cs" Inherits="ClientDetail" Async="true" %> 
<%@ Register src="../controls/ListSelectionControl.ascx" tagname="ListSelectionControl" tagprefix="lsc" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server"> 
    <link href="<%= ResolveClientUrl("~/css/clientdetail.css") %>" rel="stylesheet" type="text/css" /> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server"> 
    <div> 
     Client: <%= this.CurrentClient.Id %> - <%= this.CurrentClient.Name %> 
    </div> 
    <div> 
     <lsc:ListSelectionControl ID="ItemsListSelectionControl" runat="server" /> 
    </div> 
</asp:Content> 

le UpdatePanel dans le contrôle utilisateur comprend un couple de zones de liste et des boutons pour déplacer des éléments d'une liste à l'autre. Les boutons sont enregistrés comme AsyncPostbackTriggers et sont marqués comme CauseValidation = "false" pour empêcher les validateurs dans d'autres parties de la page de se déclencher. Le UpdatePanel est représenté ci-dessous:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ListSelectionControl.ascx.cs" Inherits="ListSelectionControl" %> 

<div> 
    <asp:UpdatePanel ID="udpListSelection" UpdateMode="Conditional" runat="server" ChildrenAsTriggers="false"> 
     <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="btnAddAll" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="btnRemoveAll" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
     <div> 
      <asp:ListBox ID="lstAvailableItems" runat="server" SelectionMode="Multiple" Rows="15" /> 
     </div> 
     <div> 
      <asp:Button ID="btnAdd" CausesValidation="false" runat="server" OnClick="AddItems" Text="Add >" /> 
      <asp:Button ID="btnRemove" CausesValidation="false" runat="server" OnClick="RemoveItems" Text="< Remove" /> 
      <asp:Button ID="btnAddAll" CausesValidation="false" runat="server" OnClick="AddAllItems" Text="Add All >" /> 
      <asp:Button ID="btnRemoveAll" CausesValidation="false" runat="server" OnClick="RemoveAllItems" Text="< Remove All" /> 
     </div> 
     <div> 
      <asp:ListBox ID="lstSelectedItems" runat="server" SelectionMode="Multiple" Rows="15" /> 
     </div> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

Le code derrière sur les boutons simplement l'échange gère des données entre les zones de liste et je ne crois pas qu'il est pertinent ici. Le problème que j'ai est que lorsque le postback partiel se produit (en pointant le code dans la page maître et en analysant la propriété IsInAsyncPostback détermine qu'il s'agit d'une publication partielle) la page traite le code du serveur ASP inline et échoue parce que l'objet CurrentClient n'est pas réapprovisionné. Je cherche à comprendre pourquoi cela se produit et pourquoi la publication partielle ne met pas simplement à jour mon UpdatePanel comme je m'y attendais?

Nous vous remercions de votre aide.

Richard

Répondre

0

je regret de vous informer de mauvaises nouvelles ... panneaux de mise à jour ont beaucoup de problèmes à l'intérieur de UserControls ... nous espérons que vous pouvez trouver une sorte de travail autour.

Questions connexes