代码改变世界

asp.net关于页面不回发的问题,寻求完美解决方案

2013-08-01 11:06  苏飞  阅读(3653)  评论(19编辑  收藏  举报

 原文地址:http://www.sufeinet.com/thread-4564-1-1.html

这个问题我相信有不少人见过,就是使用系统的分页功能时,或者是使用系统控件,都会有一个回发的功能,

这个功能是asp.net自动管理的,就是为了和我们后台的Cs代码连接起来,

但是有时候这个方法并不会生成,正常情况下在页面的Form下面都会生成如下代码

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

但是我发现在一些电脑上,也不知道是什么情况就是没有这两个方法,然后就单击按钮或者是分页时就提示如下

这很明显就是 __doPostBack方法不存在,

我就奇怪了,为什么呢?

而且在这个电脑上的所有浏览器都有一样,IE678 火狐,Google,等都是同样的效果。

着实让人郁闷,所以来博客园请教一下大家看看这种问题应该怎么解决了,

我到是想到一个比较次的方法,只能是在没有找到解决方案之后应的急

代码如下

 <script type="text/javascript">
        function SetdoPostBack() {
            var html = document.body.innerHTML;
            if (html.toLowerCase().indexOf("dopostback") < 0) {
                var sb = "<script type=\"text/javascript\">";
                sb = sb + "//<![CDATA[";
                sb = sb + "var theForm = document.forms['form1'];";
                sb = sb + "if (!theForm) {";
                sb = sb + "    theForm = document.form1;";
                sb = sb + "}";
                sb = sb + "function __doPostBack(eventTarget, eventArgument) {";
                sb = sb + "    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {";
                sb = sb + "        theForm.__EVENTTARGET.value = eventTarget;";
                sb = sb + "        theForm.__EVENTARGUMENT.value = eventArgument;";
                sb = sb + "        theForm.submit();";
                sb = sb + "    }";
                sb = sb + "}";
                sb = sb + "//]]>";
                sb = sb + "<\/script>";
                document.write(sb);//大家不要管这个,这只是一个输出,正常情况下我是添加到一个Div里的,这里是为了方便查看
            }
    }
    setTimeout('SetdoPostBack()', 2000);//2秒之后开始检查

上面的方法要用的话还需要加上两个属性不光是这两个方法没有生成,

__VIEWSTATE等几个hidden控件,因为这个是自动生成的。可这些的生成规则实在是不好处理,不过我发现只要VIEWSTATE有的话另外的两个,只要是生成了,值为Null也不会影响的。

不过这也只是应个急。

还没有想到更好的办法。

希望大家帮忙啊。

根据我的分析,会不会是在某些Ip上在运营商或者是什么地方给屏蔽了一些东西,才使页面不会生成这个方法的。

如果说是浏览器问题那可以排除了,因为我能测试的都测试了,

这问题也不是全部都有,就是有那么几个用户的电脑。

。。。。。。。。

原文地址:http://www.sufeinet.com/thread-4564-1-1.html