原文地址: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上在運營商或者是什么地方給屏蔽了一些東西,才使頁面不會生成這個方法的。
如果說是瀏覽器問題那可以排除了,因為我能測試的都測試了,
這問題也不是全部都有,就是有那么幾個用戶的電腦。
。。。。。。。。