• webform在页面生成的代码与事件回传


    <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,放弃安全管理

  • 相关阅读:
    python配置apache的web服务器方法(python的CGI配置)
    【转】移动web资源整理
    CSS实现背景透明,文字不透明,兼容所有浏览器
    html5 css3 如何绘制扇形任意角度
    Chrome 将默认不播放非重要 Flash 内容
    微信video标签全屏无法退出bug
    百度bae定时任务使用方法
    判断浏览器是否支持某个css3属性的javascript方法
    javascript检测是否安装了flash
    移动前端不得不了解的html5 head 头标签
  • 原文地址:https://www.cnblogs.com/Tpf386/p/6290384.html
Copyright © 2020-2023  润新知