【问题标题】:ASP.NET Label Inside UpdatePanel Not UpdatingUpdatePanel 内的 ASP.NET 标签未更新
【发布时间】:2011-11-24 05:34:04
【问题描述】:

我是 ASP.NET 的新手,我正在尝试获取一个标签来更新我点击按钮时获取的一些信息。 click 函数被调用并返回就好了(我已经调试并逐步完成了整个事情)。唯一不起作用的是我设置要更新的标签文本的位置。

这是在按钮单击时调用的函数:

Protected Sub submitbutton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles submitbutton.Click
        Dim res As String() = query(email1.Text)
        If Not res Is Nothing Then
            url1.Text = res(0)
            date1.Text = res(1)
        End If

    End Sub

我知道它进入 if 并尝试设置文本,但客户端没有任何反应。

这是我的更新面板:

<asp:UpdatePanel ID="UpdatePanelSettings" runat="server" UpdateMode="Always"  >
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="submitbutton" EventName="click" />
        </Triggers>
        <ContentTemplate>
            <table>
                <tr>
                    <td>Emails</td><td>Url Parsed</td><td>Date Created</td>
                </tr>
                <tr>
                    <td>
                        <asp:TextBox runat="server" ID="email1" Width="300" />
                    </td>
                    <td>
                        <asp:Label runat="server" ID="url1" Text="-" />
                    </td>
                    <td>
                        <asp:Label runat="server" ID="date1" Text="-" />
                    </td>
                </tr>
                <tr>
                    <td colspan="3"><asp:Button ID="submitbutton" runat="server" Text="Submit" /></td>
                </tr>
            </table>
        </ContentTemplate>
    </asp:UpdatePanel>

正如我所说,我知道触发器可以正常工作,因为我在调用它时已单步执行了代码。我知道您还需要一个 ScriptManager,它位于 Site.Master 文件中的表单元素中(我实际上只是在默认模板中添加了一些东西。这只是一个概念验证项目)。

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />

从我在网上找到的所有文章中,这应该就是我所需要的。一篇文章提到必须使用 Web.Config 做一些事情,但它说对于 VS 2005 并且我正在使用 2010。它提到您不必在 2008 年进行任何更改,所以我认为 2010 年也是如此。我缺少什么需要更新标签?

【问题讨论】:

    标签: asp.net ajax asp.net-ajax updatepanel


    【解决方案1】:

    1) res 是否有可能是两个空白项?

    2) 是否有任何其他代码触及这两个标签(例如加载表单时)?

    【讨论】:

    • 1) 不,当我单步执行代码时,它们具有值,因此应该为它们分配一些东西 2) 不,没有其他代码可以触及它们。这是到目前为止项目中的所有代码
    • 我遇到了类似的问题,您的建议对我有所帮助,在我的情况下,另一个代码段正在更改标签的值,非常感谢。
    【解决方案2】:

    我已经有一段时间没有使用这个了,但您可能需要明确调用:

    UpdatePanelSettings.Update()
    

    在你的命令结束时。

    .

    还是试试吧。

    【讨论】:

    • 我第一次尝试此操作时遇到异常,因为 UpdatePanel 上的 UpdateMode 设置为始终,并且您只能在有条件时调用 .Update()。于是我改了,又试了一次,还是没有更新。
    • 嗯,一般来说,你不应该有“总是”更新模式。无论如何,尝试将页面放在一个新的空母版页中,确保其中没有其他控件,并尝试查看它是否仍然有效。检查浏览器是否也显示 JavaScript 错误。
    • 啊哈!这是一个javascript错误。问题是请求的处理需要几分钟才能返回,因此 AJAX 请求在返回之前超时。不知道如何解决这个问题......
    • @The.Anti.9 - ScriptManager 上有一个 AsyncPostBackTimeout 属性,默认为 90 秒。将此更新为您所需的超时时间。
    【解决方案3】:

    您可以尝试删除该部分吗?

    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="submitbutton" EventName="click" />
    </Triggers>
    

    然后通过添加 ChildrenAsTriggers="true" 来更改 UpdatePanel。

    <asp:UpdatePanel ID="UpdatePanelSettings" runat="server" UpdateMode="Always" ChildrenAsTriggers="true"  >
    

    理论上,这应该与您上面的方式完全相同,但只是试图帮助您调试它。

    【讨论】:

    • 很遗憾,这也没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多