2

我有一个使用 VB 和 Ajax 工作的 Web 应用程序。我正在使用更新面板来避免回发到服务器时令人讨厌的“闪烁”。

我想在更新面板本身内定义一个按钮控件(尝试将它移到外面并得到一些灾难性错误,所以把它留在那里),使当前面板不可见并且兄弟面板可见。这适用于必须单击两次按钮的例外情况。不是双击,而是单击一次而不是再次单击。

在设置断点时,我发现附加到按钮背后的代码实际上是在第一次单击时执行的,但是面板没有按预期切换。如果我单击相同的按钮或更糟糕的是,单击不同的按钮,则会出现第二个面板的预期行为。然而,随着第二个按钮被点击,第三个面板被显示出来,第三个面板由于第二个按钮被点击而变得可见。

我假设这种行为是由于更新面板及其 Ajax 特性造成的。有没有办法避免第二次点击?我在滥用更新面板吗?我真的很想使用模态弹出窗口(就在 AjaxToolKit 之外),但是在回发数据时遇到了问题,所以我选择了这种方法。任何见解、帮助甚至批评都将受到欢迎,因为这已经困扰了我足够长的时间。谢谢

4

8 回答 8

1

我认为您的问题是方法执行后只有更新面板从服务器接收数据。您尝试更改的面板位于更新面板之外,因此它不知道其属性已更改。

您要么需要进行整页回发,要么在更新面板中拥有要修改的面板。

于 2008-09-05T19:01:26.250 回答
1

如果您摆脱 UpdatePanels,PostBacks 会按预期工作吗?很有可能您的 Page_Load 或其他更高级别的事件在到达您的点击事件之前以某种方式“重置”了一些东西。会是这样吗?

于 2008-09-04T18:50:15.010 回答
0

Like others have said an update panel only updates its contents, thats one of the main benefits of using it.

Panel2 and pnlPrvCmt need to be inside your update panel for your button click method to work. Another option would be to put Panel2 inside one update panel and pnlPrvCmt inside a second update panel. Then any control inside either update panel will cause both to refresh, as long as the UpdateMode=Always (which it is by default).

于 2008-11-06T16:54:34.090 回答
0

您的更新面板位于其他面板内。

应该反过来吗?更新面板中的仅 AFAIK 控件将通过 AJAX 调用进行更新。

于 2008-09-04T19:29:33.573 回答
0

我以前遇到过并解决了它,我只是不记得如何了。我将尝试找到我的旧代码并回复您。想一想,您是否在脚本管理器中启用了 EnablePartialRendering?也许尝试将两个容器包装在第三个面板中。

于 2008-09-04T18:54:14.000 回答
0

我发现这发生在 2 个不同的场景下:

  1. 控件上没有设置 ID。ID 不在标记中,或者在创建动态控件时未设置 ID。ASP.Net 使用 ID 来跟踪操作。

  2. 嵌套更新面板。场景:使用 Masterpage 时,您可能有一个内容占位符,您将其包装在 UpdatePanel 中,这样页面上的内容中就不需要 UpdatePanel。然后,在开发页面时,您可能会习惯性地添加一个 UpdatePanel。

于 2014-11-09T17:49:13.437 回答
0

这是一个相当简单的解决方案。(今天早上我遇到了同样的问题。)

UpdatePanel 无法在其外部呈现内容。因此,正如您所注意到的,更新正在发生,但您没有看到结果。

最简单的解决方案是强制一个完整的回发。你可以这样做:

protected override void OnInit(EventArgs e)
{
    var scriptManager = ScriptManager.GetCurrent(this);
    // or this.Page in a UserControl, etc.

    scriptManager.RegisterPostBackControl(someButton);
    scriptManager.RegisterPostBackControl(someOtherButton);
    // etc. for each control that needs to update something outside the UpdatePanel
}

这仍然允许通过 Ajax 在 UpdatePanel 中更新按钮本身(例如,将它们的状态更改为禁用或启用)。仅当单击按钮时才会发生完整的回发。

于 2008-11-03T16:24:31.843 回答
0

尝试在创建动态控件时为其提供 ID。
出于某种原因,.net 要求动态控件在此上下文中工作。

myControl.id="newID"
于 2013-12-19T05:23:34.720 回答