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

时间:2016-06-16 16:21:24

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

更新

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

我们认为可能是因为目标框架已经过时了,所以我们将整个项目从.NET 4.0更新到4.6.1,希望能解决它,但它仍然不起作用。关于什么可能导致UpdatePanel不起作用的任何想法?

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

它有一个母版页...我不知道这是否有所作为。我是那些新手。

<%@ 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方法被显式调用并且设置了正确的值,并且页面上仍然没有发生任何事情。我不知所措。所以如果有人能找到我做错的事情,我会非常感激。我已经浏览了这里的每个帖子,我可以找到类似的问题,但没有一个修复工作。

如果您想要发布其他代码,请与我们联系。

2 个答案:

答案 0 :(得分:0)

1&gt;您可以用Ajax工具箱更新面板替换UpdatePanel .. 2&gt;您还可以在更新'SearchControlsUpdatePanel'中更改upadate mode partial,然后在'Public Event ProviderTypeChanged(ByVal sender As Object,ByVal e As EventArgs)'事件中写入 SearchControlsUpdatePanel.Update()方法..

答案 1 :(得分:0)

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

故事的道德,如果没有其他任何理由你的UpdatePanel无法正常工作。确保您(或其他人)没有使用 Render()方法执行任何奇怪的东西