JavaScript 触发的 UpdatePanel 未正确更新

发布于 2024-11-16 08:05:14 字数 332 浏览 0 评论 0原文

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

我有一个动态加载的 Web 用户控件,其 UpdatePanel 无法正确更新。 UpdatePanel 是由 JavaScript 函数触发的。

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

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

I'm working on a large, complex ASP.NET project.

I have a dynamically loaded web user control with an UpdatePanel that doesn't update correctly. The UpdatePanel is being triggered from a JavaScript function.

I've managed to create a very simplified project that demonstrates the issue and have posted it at http://www.softcircuits.com/Client/TestProject.zip.

I would be extremely grateful if someone with a deeper understanding of these technologies could take a look and point me in the right direction.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

↙温凉少女 2024-11-23 08:05:14

我想我发现发生了什么。我知道 UpdatePanel 回发与普通回发类似,但仅将页面的一部分发送回客户端。所以我玩了一下,发现 HalfTrackMindMan 提到的内容可以按预期工作。然后我向谷歌询问 UpdatePanels 的常见错误,并发现 这篇文章解释了出了什么问题。

这就是实际发生的情况。

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

因此,如果您将测试放入其中一个文本框并按下按钮,您可以看到“测试”值进入服务器来了 因此,

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 上的标签,

希望有所帮助。

I think I found what is happening. I know that the UpdatePanel postback is like a normal postback but only a part of the page is sent back to the client. So I played around a bit and found what HalfTrackMindMan mentioned to work as expected. Then I asked google to about common mistakes with UpdatePanels and found this article that explained what is going wrong.

This is what actually happens.

  1. __doPostback post the values of the page to the server
  2. in the post parameters the values of both textboxes are blank
  3. On the server the Load event is fired and you change the text of the textboxes
  4. EventHandlers are executed and the posted values are set on the 2 textboxes (they are both reset to blank
  5. ...
  6. The update panel is rendered with blank values

So if you put testing in one of the textboxes and press the button you can see that "testing" value goes to the server and comes back.

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>

So to update the values of input element in an update panel you need to do it in the Pre_render event. On the other hand you can update a label on on_load and it will work.

Hope that helps.

冰火雁神 2024-11-23 08:05:14

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

Try to set textboxes values in the OnPreRender event of UpdatePanel instead of the OnLoad.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文