<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>

这是Webform生成的js代码,这就是回传的代码。

<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMTExMDY2OTg1DxYGHgtTZWFyY2hUZXJtcwUeIHdoZXJlIFByb2R1Y3RfRW5hYmxlIElOICgxLDIpHg1zb3J0T3JkZXJUeXBlAgEeDHNvcnRPcmRlcmZsZAUKUHJvZHVjdF9JZBYCAgMPZBYEAgcPFgIeC18hSXRlbUNvdW50AgoWFAIBD2QWBmYPFQUCOTIBMgI5MgZXMDAxMjECOTJkAgEPFQcH5ZCN54mHNAzln47luILnianmlpkZ5LqM57qn5YiG57G7LeS" />
</div> <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCgLcusjKAwKU1r6rDwL2msm/DQLugsrADgLUl8m9AQKQ5rWbCQL9oteUAQLyzf36DQLzzf36DQKsoM/XA1jOOpbZyCZOwaN0afy5LgMXoTfogWASdNnNDW2IvNAq" />
</div>

这个是生成的用来帮助状还原的代码。

以上html代码都会在生成的form标签内:

<form name="form1" method="post" action="List.aspx?menu_id=45" id="form1">

</form>

webform的所有页面都包含在类似这样的form标签内。

如果页面缺少自动生成的js怎么办?

两个控件是例外,Button 和 ImageButton,正是因为它们不是通过调用__doPostBack来回发事件,所以通过表单隐含变量__EVENTTARGET和__EVENTARGUMENT是无法获取得到引发PostBack的Button或ImageButton的ID和参数值的,可通过下面的方式实现
1)在页面中加如 LinkButton ,页面就会在页面中加载POSTBACK所需的JS
<input type="hidden" value="" />
<input type="hidden" value="" />
function __doPostBack(eventTarget, eventArgument) {
   if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
     theForm.__EVENTTARGET.value = eventTarget;
     theForm.__EVENTARGUMENT.value = eventArgument;
     theForm.submit();
   }
}

Bug:
问题:『使用__doPostBack会导致』
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

问题分析及解决方案:『来源网络』
这个要具体分析。本来这个措施是asp.net2.0用来防止客户端“欺诈”服务器端的。例如本来输出到客户端的一个事件被触发时需要回发的命令是“__doPostback('ctl01$abc','user_1')”的,如果采取采取手段把回发参数由 user_1 改为 user_5 了,服务器端会重新核对输出的是不是user_5,发现和这个页面上一个输出的脚本不一致,就会产生这个异常。
但是,很多程序员写的程序按照过去的习惯(或者按照更加高级灵活的设计例如一些Ajax组件)没有考虑这个问题或者是忽略这个欺诈的可能性,写的程序可能会修改参数或者修改目标控件。
因此这样具体问题具体分析。不太可能跟浏览器距离服务器的远近有关,应该还是编程逻辑问题。你应该对出异常的画面以及所使用的数据进行分析。有时候,经常也需要将这个参数设置为false,放弃安全管理

最新文章

  1. 报错:Failed to instantiate the default view controller for UIMainStoryboardFile &#39;MainStoryboard&#39; - perhaps the designated entry point is not set?
  2. HDU 1561 The more, The Better 树形DP
  3. AFNetWorking 队列请求
  4. ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
  5. [1]Telerik Extensions for ASP.NET MVC 中文教程(转)
  6. Java-java中的有符号,无符号操作以及DataInputStream
  7. 数据库 使用DML语句更改数据
  8. App Store最新审核指南(2015年3月更新版)
  9. coco2dx 精灵类
  10. MyEclipse默认编码为GBK,修改为UTF8的方法
  11. JS闭包(一)
  12. TCP/IP详解之:SNMP
  13. srm 533
  14. dip2px
  15. 2017寒假零基础学习Python系列之函数之 函数之定义可变参数
  16. 从LINQ开始之LINQ to Objects(上)
  17. 打开即时通讯服务器openfire的大门
  18. yii2.0 url美化-apache服务器
  19. SpringBoot数据库集成-Mybatis
  20. 快速入门 WePY 小程序【转】

热门文章

  1. emmet 教程 emmet快捷键大全
  2. react学习笔记-01
  3. centos7,yum安装的redis用systemctl无法启动
  4. Python建立SSH连接与使用方法
  5. js实例--js滚动条缓慢滚动到顶部
  6. IIS的虚拟目录和子应用程序
  7. 关于ApkTool不同版本在重新打游戏包时候的区别
  8. 5、判断、循环、数组综合练习案例(迷你DVD)
  9. POJ题目(转)
  10. [ An Ac a Day ^_^ ] HDU 1257 基础dp 最长上升子序列