0

我有一个自定义模板控件(工具栏),其中包含一个自定义用户控件(按钮)该按钮使用 jquery 来设置和管理状态/回发/非回发等。

一些按钮用占位符隐藏,并在点击其中一个按钮时显示。

所有关于 jquery 的按钮似乎都是在回发时启动的(使用 PageRequestManager 在 UpdatePanel 中的 ajax 样式)但是视图状态在占位符不可见的按钮上丢失了。

这似乎是模板化控件中占位符上的视图状态和按钮特有的问题。这通常适用于非 ajax 环境,我怀疑我遗漏了一些东西。

任何让我思考的评论表示赞赏。

该代码位于各个部分,可能不值得粘贴,因为它将完全断开连接(我知道这没有帮助)

4

2 回答 2

0

如果我没记错的话,如果 ASP.NET 控件的可见性设置为 false,它们就不会完成它们的生命周期。意思是,不会调用 Render() 之类的东西,而 ViewState 必须是其中之一(这是有道理的)。将更新面板与 AJAX/Javascript 一起使用也是一件非常棘手的事情,而且效果不是很好。这就是 ASP.NET 控件和更新面板的工作方式。

我的建议是要么使用更新面板,要么使用 javascript,而不是两者兼而有之。

您可以通过使用 jquery 的 $.post/get 并将一段代码替换为从 Web 服务调用返回的 html 来轻松模拟更新面板的功能。

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

如果您将 JS 附加到通过更新面板更新的代码,您最终也会遇到其他问题。例如:如果您有一个项目列表,每个项目都附加了 JS,例如 ASP.NET AJAX Control Toolkit 控件之一,并且您使用更新面板从页面中删除了其中一个,则 JS 用于挂钩控制起来会不同步。

于 2009-11-10T14:17:30.320 回答
0

我觉得我需要在这里回答我自己的问题:

UpdatePanel 不是使用 PlaceHolders 或 div 与 css,而是根据呈现选项在 div 或 span 中呈现。在这种情况下,只需隐藏 UpdatePanel 创建的 div 或 span,而不是尝试隐藏/显示新的外部容器。

于 2009-11-27T19:50:18.770 回答