【问题标题】:Why isn't my update panel working?为什么我的更新面板不起作用?
【发布时间】:2016-10-18 06:52:47
【问题描述】:

更新

显然这个问题与控件无关。我已经在我的页面上添加了其他 UpdatePanel,但它们都没有工作。

我们认为可能是因为目标框架太旧,所以我们将整个项目从 .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" %>

原帖

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

<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 设置为 Conditional 和 Always ,并且我无法在不刷新整个页面的情况下翻转这些标签的可见性。

我尝试了一些可以通过页面刷新来翻转它们的方法,有些方法是异步回发,没有页面刷新,但更新面板内也没有变化。我已经逐步完成并看到可见性被翻转,看到 UpdatePanel 的 Update 方法被显式调用并设置了正确的值,但页面上仍然没有发生任何事情。我不知所措。因此,如果有人能发现我做错了什么,我将不胜感激。我在这里浏览了所有可以找到类似问题的帖子,但没有一个修复有效。

如果您想发布其他代码片段,请告诉我。

【问题讨论】:

    标签: asp.net vb.net asynchronous user-controls updatepanel


    【解决方案1】:

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

    【讨论】:

    • SearchControlsUpdatePanel 位于不同的文件中。它不能从控件的页面中引用,该页面是该事件所在的位置。你的意思不是用 Ajax 工具包更新面板替换它吗?它们是一样的。
    • 哦,所以 Ajax 工具包更新面板...我不知道这是否可行,但我知道它会增加构建时间和页面加载时间,这是我的两件事绝对不想上这个项目。它已经够臃肿了。
    【解决方案2】:

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

    这个故事讲得真好,如果你的 UpdatePanel 不工作的原因没有其他意义的话。确保您(或其他人)没有使用 Render() 方法做任何奇怪的事情

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 2023-03-31
      • 1970-01-01
      • 2014-07-30
      • 2016-10-19
      • 2013-12-28
      • 1970-01-01
      相关资源
      最近更新 更多