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

摘要:
=false)){格式__EVENTTARGET.value=EVENTTARGET;格式__EVENTARGUMT.value=EVENTARGUMENT;格式.submit();}}//]]˃这是Webform生成的js代码。这是返回的代码YPFQUCOTIMgI5MgZXMDAxMjECOTJkAgEPFQcH5ZCN54mHNAzln47luILnianmlpkZ5LqM57qn5YiG57G7LeS“/˃这是用于帮助恢复的生成代码。menu_Id=45“Id=”form1“˃webform的所有页面都包含在这样的表单标记中。在配置中使用,或在页面“%˃中使用˂%@PageEnableEventValidation=“true”启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现这些事件的服务器控件。如果数据有效且是预期的,请使用ClientScriptManager。RegisterForEventValidation方法,用于注册回发或回调数据以进行验证。
<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,放弃安全管理

免责声明:文章转载自《webform在页面生成的代码与事件回传》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇error MSB6006: “cmd.exe”已退出,代码为 3。最新BIOS设置中英文对照表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

推荐 iOS 上的一款黑科技自动化脚本:捷径

你的肯定是我最大的鼓励和支持。建议阅读此黑科技。即使没有代码,您也可以玩自动化。高效的钓鱼自动化|在PC端,这项黑科技记录了脚本。完成后按X向导!如何将爬虫和自动化结合起来,帮助小姐姐刷抖音,彻底解放双手...

java.net.URISyntaxException的解决办法

直接采用Stringurl=“http:count=1”;HttpGethttpget=新的HttpGet(url);HttpResponseresponse=client.execute(httpget);例如,“|”&amp;因此,不能直接使用String而不是URI来访问。然后我们可以使用URL生成URI的方法来解决这个问题。代码如下:URLu...

2.页面绘制和引入组件库uView

文本+背景色的形式,而不是横幅图的形式,可以节省未来的工作量。在index.vue中,关于开关的代码:EFGHIJKLMNOPQRSTUWXYZB˃DEFGHIJKLNNOPQRSTUVWXYZEFGHIJKLMNOPQRSTUVWXYZ导出默认值{data(){return{}},onLoad()},方法:{}}。横幅{width:100%;height:...

uniapp打包h5 出现'连接服务器超时,点击屏幕重试'的页面

跟踪以首先找出原因全局组件AsyncErrorNew在中注册。js文件可以自定义。我很快就过去了,所以我添加了一个空白页面,然后在清单中介绍了组件。json文件...

Navicat数据存放位置和备份数据库路径设置

navicat数据库存储在哪里?有了这样的问题,让我们来解决这个问题。默认情况下安装Navicat,默认情况下也安装MySQL,数据库存储在默认用户的目录中。选择安装目录时,还可以选择数据的位置。很多人此时只是设置了MySQL的安装位置。...

win server2008关闭危险端口445,135,137,138,139的方法

在Windowsserver2008系统上,有两种途经可以禁用本地端口:1、通过Windows防火墙2、通过IP安全策略一、通过Windows防火墙禁用端口:1、点击“控制面板-Windows防火墙”,确保启用了Windows防火墙。重复操作,添加135、137、138、139规则然后在新规则属性中,单击筛选器操作选项卡单击下方的添加,并且不要勾选右侧的使用...