使用Javascript调用回调函数__doPostBack()
2005-12-8 试用了一下Ajax.Net Pro,发现5.11.4.2与UltraWebGrid有冲突,改用Ajax.NET Professional pre-build 5.10.6.1,可以与UltraWebGrid一起使用,但是最后才发现Ajax并不能实现我的要求。
Ajax使用了另一个http connection来与后台处理,并不能返回当前页上的Asp.net的Web组件状态,而我需要的是使用Javascript函数来返回当前页面上的Web组件状态,对页面刷新没要求,晕,一开始就走错路了。
在google上找到一篇文章,这才是我需要的。
http://blurlzy.cnblogs.com/archive/2004/05/13/9314.html
在Form上放一个LinkButton,然后将Text属性设为空,再在script里可以用了:__doPostBack('LinkButtonID','');
休息不好就是不行啊。本来简单的东西非要搞复杂。
2005-12-9 因为需要动态生成一些功能,上面的方法还是比较笨,想了一晚上,既然是用Form的Submit提交上去的,在PageLoad里用Request取到再判断不就行了。马上试了一下,可以了。
Asp.net 自动生成的__doPostBack代码:
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
theform = document.forms["Form1"];
}
else {
theform = document.Form1;
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
Asp.net后台代码:
{
if(!Page.IsPostBack)
{
//第一次加载页面
}
else
{
//PostBack后
//__EVENTTARGET
lblInfo.Text=(Request["__EVENTTARGET"]==null) ? "" : Convert.ToString(Request["__EVENTTARGET"]);
//__EVENTARGUMENT
lblCaption.Text=(Request["__EVENTARGUMENT"]==null) ? "" : Convert.ToString(Request["__EVENTARGUMENT"]);
}
}
.aspx里的调用代码:
结果:
lblInfo显示值:hahaha
lblCaption显示值:param1