【问题标题】:JavaScript-Triggered UpdatePanel Not Updating CorrectlyJavaScript 触发的 UpdatePanel 未正确更新
【发布时间】:2011-06-20 01:44:48
【问题描述】:

我正在处理一个大型、复杂的 ASP.NET 项目。

我有一个动态加载的 Web 用户控件,其 UpdatePanel 不能正确更新。 UpdatePanel 被 JavaScript 函数触发。

我设法创建了一个非常简化的项目来演示该问题,并将其发布在http://www.softcircuits.com/Client/TestProject.zip。

如果对这些技术有更深入了解的人能够看一看并指出正确的方向,我将非常感激。

【问题讨论】:

  • 我遇到了类似的问题,在动态控件的 OnLoad 期间(在 OnInit 期间添加),Request.Form 尚未填充 HiddenField。当然,我正在做一个完整的回传,而不是部分回传。等到 PreRender 读取 HiddenField 工作,但并不令人满意。

标签: javascript asp.net ajax


【解决方案1】:

我想我发现了正在发生的事情。我知道 UpdatePanel 回发就像一个普通的回发,但只有页面的一部分被发送回客户端。所以我玩了一下,发现 HalfTrackMindMan 提到的按预期工作。然后我向谷歌询问了 UpdatePanels 的常见错误,发现 this article 解释了出了什么问题。

这就是实际发生的事情。

  1. __doPostback 将页面的值发布到服务器
  2. 在 post 参数中,两个文本框的值都是空白的
  3. 在服务器上触发 Load 事件并更改文本框的文本
  4. EventHandlers 被执行并在 2 个文本框上设置发布的值(它们都被重置为空白
  5. ...
  6. 更新面板以空白值呈现

因此,如果您将测试放入其中一个文本框并按下按钮,您会看到“testing”值进入服务器并返回。

1|#||4|356|updatePanel|MainContent_WebUserControl11_ctl00_UpdatePanel1|
        <p>
            Message:<br />
            <input name="ctl00$MainContent$WebUserControl11$ctl00$TextBox1" type="text" value="testing" id="MainContent_WebUserControl11_ctl00_TextBox1" />
        </p>

因此,要在更新面板中更新输入元素的值,您需要在 Pre_render 事件中进行。另一方面,您可以更新 on_load 上的标签,它会起作用。

希望对您有所帮助。

【讨论】:

  • 谢谢@marto。我实际上已经看过你链接的文章。我会更仔细地再读一遍。我通过在 Pre_Render 中做一些事情来完成这项工作,但我对一些细节仍然很模糊。
【解决方案2】:

尝试在 UpdatePanel 的 OnPreRender 事件而不是 OnLoad 中设置文本框值。

【讨论】:

  • 是的,这似乎确实有效,谢谢。尽管在继续之前我会尝试更好地理解这个问题。它肯定似乎与动态加载控件的时间有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多