我有一个使用VB和Ajax工作的Web应用程序。我正在使用updatepanel来避免在回发到服务器时出现恼人的“闪烁”。
我想在updatepanel本身内定义一个按钮控件(尝试将其移到外面并发生一些灾难性的错误,因此将其留在那里),这使得当前面板不可见并且兄弟面板可见。这适用于必须单击按钮两次的例外。不是双击,而是单击一次而不是再次单击。
在设置断点时,我发现附加到按钮后面的代码实际上是在第一次单击时执行的,但面板没有按预期切换。如果我单击相同的按钮或更糟糕的是,使用另一个按钮,则会出现第二个面板的预期行为。但是,点击第二个按钮会显示第三个面板的不需要的奖励,第三个面板因点击第二个按钮而可见。
我假设这种行为是由于updatepanel及其Ajax性质造成的。有没有办法避免第二次点击?我是否滥用了更新面板?我真的想使用一个模态弹出窗口(在AjaxToolKit之外)但是在回发数据方面存在问题,所以我选择了这种方法。任何见解,帮助,甚至批评都会受到欢迎,因为这已经困扰了我很长时间。感谢
答案 0 :(得分:1)
如果你摆脱了UpdatePanels,事情就像PostBacks一样有效吗?您的Page_Load或其他事件中的某些事情可能会在其进入您的点击事件之前以某种方式“重置”事物。可能是这种情况吗?
答案 1 :(得分:1)
我认为你的问题是只有更新面板在方法执行后才从服务器接收数据。您尝试更改的面板位于更新面板之外,因此它不知道其属性已更改。
您需要执行整页回发或在更新面板中修改要修改的面板。
答案 2 :(得分:0)
我之前遇到过这个并解决了它,我只是不记得如何。我会尝试找到我的旧代码并回复你。一想法,你在scriptmanager中启用了EnablePartialRendering吗?也许可以尝试将两个容器包装在第三个面板中。
答案 3 :(得分:0)
您的更新面板位于其他面板内。
那应该是另一种方式吗?更新面板中的AFAIK仅控件将通过AJAX调用进行更新。
答案 4 :(得分: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中更新(例如,将其状态更改为禁用或启用)。只有单击按钮才会发生完整的回发。
答案 5 :(得分:0)
与其他人一样,更新面板只更新其内容,这是使用它的主要好处之一。
Panel2和pnlPrvCmt需要位于更新面板中,才能使按钮单击方法生效。另一个选择是将Panel2放在一个更新面板中,将pnlPrvCmt放在第二个更新面板中。然后,任何更新面板内的任何控件都会导致两者都刷新,只要UpdateMode = Always(默认情况下是这样)。
答案 6 :(得分:0)
尝试在动态控件创建时给动态控件。
由于某种原因,.net需要这个动态控件才能在此上下文中工作。
myControl.id="newID"
答案 7 :(得分:0)
我发现这是在2个不同的场景下发生的:
控件上未设置ID。在创建动态控件时,ID不在标记之外,或者未设置ID。 ASP.Net使用ID来跟踪行动。
嵌套的UpdatePanels。 Scenerio:使用母版页时,您可能有一个内容占位符,您可以将其包装在UpdatePanel中,以便页面上的内容不需要UpdatePanel。然后,在开发页面时,您可能会习惯添加UpdatePanel。