为什么我的更新面板不起作用?

Why isn't my update panel working?

更新

显然这个问题与控件无关。我已将其他 UpdatePanel 添加到我的页面上,其中 none 个都在工作。

我们认为可能是因为目标框架太旧了,所以我们将整个项目从 .NET 4.0 更新到 4.6.1,希望能修复它,但它仍然不起作用。关于什么可能导致 UpdatePanels 根本无法工作的任何想法?

我在许多其他项目和页面上使用过 UpdatePanel,所以我知道如何让它们在正常情况下工作...

它确实有母版页...我不知道这是否有所不同。我是新手。

<%@ Page Title="" Language="vb" AutoEventWireup="false" ClientIDMode="Static" MasterPageFile="~/Primary.Master" CodeBehind="Overpayment_Referral_Form_New.aspx.vb" Inherits="Overpayment_Referral_Form_New" %>
<%@ MasterType VirtualPath="~/Primary.Master" %>

原版Post

好的,所以我有一个用户控件可以使用一些下拉列表和文本框进行搜索,如下所示:

<asp:Label runat="server" ID="lblProviderType" CssClass="InlineSpacer">
   Provider Type:
   <asp:DropDownList ID="ddlPartyClass" runat="server" Width="128" AutoPostBack="True"></asp:DropDownList>
</asp:Label>

以后:

<asp:Label ID="lblFirstName" runat="server" CssClass="InlineSpacer">
   First Name:
   <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
</asp:Label>
<asp:Label ID="lblLastName" runat="server" CssClass="InlineSpacer">
   Last Name:
   <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
</asp:Label>
<asp:Label runat="server" ID="lblFullName" Visible="False" CssClass="InlineSpacer">
   Provider Name:
   <asp:TextBox ID="txtFullName" runat="server"></asp:TextBox>
</asp:Label>

下拉列表是在后面的代码中填充的。当它发生变化时,ToggleFields 函数运行,翻转上面标签的可见性。我目前定义了一个自定义事件,我在 selectedIndexChanged 处理程序中引发该事件:

Public Event ProviderTypeChanged(ByVal sender As Object, ByVal e As EventArgs)
...
Private Sub ddlPartyClass_SelectedIndexChanged( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs _
            ) Handles ddlPartyClass.SelectedIndexChanged

    ToggleFields()
    RaiseEvent ProviderTypeChanged(sender, e)
End Sub

(我实际上并没有命名或创建其中的大部分内容,所以对于奇怪的约定和格式我深表歉意。至少它们对我来说很奇怪......)

我已将此控件放入我的页面中:

<asp:UpdatePanel ID="SearchControlsUpdatePanel" runat="server">
    <ContentTemplate>
        <div id="AllSearchControls">
            <div id="ProviderSearchControlDiv" class="SearchControlDiv">
                <uc1:ContainedProviderSearch runat="server" ID="ProviderSearchControl" SearchContext="OverpaymentReferralForm"/>
            </div>
        </div>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ProviderSearchControl" EventName="ProviderTypeChanged"/>
    </Triggers>
</asp:UpdatePanel>

我目前还让我页面的脚本管理器将控件注册为异步控件。我的脚本管理器的 EnablePartialRendering 属性设置为 'True'。我已经尝试了用于触发器的控件的每个变体,其中更新面板位于(在控件内部,在包含控件的页面上,两者),以声明方式或编程方式设置触发器,将 UpdateMode 设置为条件和始终,如果不刷新整个页面,我将无法获得这些标签的可见性。

我尝试过一些可以通过页面刷新翻转它们的东西,有些 postback 是异步的,没有页面刷新,但更新面板内部也没有变化。我逐步查看了可见性,观察了 UpdatePanel 的 Update 方法被显式调用并设置了正确的值,但页面上仍然没有任何反应。我不知所措。因此,如果有人能发现我做错了什么,我将不胜感激。我已经遍历了这里的每个 post,我可以找到类似的问题,并且 none 的修复已经奏效。

如果您需要其他代码片段 posted,请告诉我。

1>您可以用 Ajax 工具包更新面板替换 UpdatePanel.. 2>您也可以在 'SearchControlsUpdatePanel' 更新 'SearchControlsUpdatePanel' 中更改部分更新模式,然后在 'Public Event ProviderTypeChanged(ByVal sender As Object, ByVal e As EventArgs)' 事件中写入 SearchControlsUpdatePanel.Update() 方法..

好的,所以我不完全确定为什么会破坏它,但我的页面继承自另一个 覆盖了 Render() 方法的页面。在评论覆盖掉之后,我的更新面板开始工作。这是一个旧系统,我们实际上正计划删除我继承的那个页面,但是,是的,这就是问题所在。

故事的寓意如此,如果没有其他原因说明您的 UpdatePanel 无法正常工作的话。确保您(或其他人)没有使用 Render() 方法做任何奇怪的事情