从UpdatePanel重新部署内联服务器标签的部分回发?

时间:2013-08-14 16:18:39

标签: asp.net updatepanel partial-postback

我有一个Web应用程序,我正在尝试使用带有UpdatePanel的用户控件,以便可以使用部分回发在网页上更新控件。

我已在网站的母版页中定义了ScriptManager。它位于ContentPlaceHolder之外,但位于body的form标记内,如下所示:

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

在内容页面中,我有一些使用内联服务器标签绑定到数据的HTML和一个包含UpdatePanel的用户控件,如下所示:

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

用户控件中的UpdatePanel包含几个列表框和按钮,用于将项目从一个列表移动到另一个列表。按钮注册为AsyncPostbackTriggers,并标记为CauseValidation =“false”,以防止页面其他部分中的验证器被触发。 UpdatePanel如下所示:

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

按钮背后的代码只是管理列表框之间的数据交换,我不认为它与此相关。

我遇到的问题是,当部分回发发生时(断开主页面中的代码并分析IsInAsyncPostback属性确定它是部分回发),页面正在处理内联ASP服务器代码并失败,因为CurrentClient对象未重新填充。我想了解为什么会发生这种情况以及为什么部分回发不仅仅是按照我的预期更新我的UpdatePanel?

感谢您的协助。

理查德

1 个答案:

答案 0 :(得分:0)

我遗憾地告诉你一些坏消息...更新面板在UserControls中有很多问题...希望你能找到某种解决方法。