在UpdatePanel的部分回邮中重新评估了内联服务器标记



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

我已经在网站的母版页中定义了ScriptManager。它位于ContentPlaceHolder之外,但位于正文的表单标记内部,如下所示:

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

感谢您的帮助。

Richard

很遗憾,我不得不通知你一些坏消息。。。更新面板在UserControls内部有很多问题。。。希望你能找到一些工作。

最新更新