asp.net/ajax自定义模板控件,显示/隐藏带占位符的项目

时间:2009-11-10 09:42:09

标签: asp.net jquery ajax placeholder

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

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

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

似乎是一个问题是特定于模板化控件中占位符上的视图状态和按钮。这通常适用于非ajax环境,我怀疑我错过了什么。

任何让我思考的评论都会受到赞赏。

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

2 个答案:

答案 0 :(得分:1)

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

而不是使用带有css的PlaceHolders或div,UpdatePanels在div或span中呈现,具体取决于呈现选项。在这种情况下,只需隐藏UpdatePanel创建的div或span,而不是试图隐藏/显示新的外部容器。

答案 1 :(得分: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用来挂钩控件将不同步。