Asp.Net客户端触发服务器端事件及_dopostback

RT-Thread与ROS2通信:micro-ROS在STM32上的移植实践 本文详细介绍了在STM32平台上使用RT-Thread实时操作系统移植micro-ROS实现与ROS2通信的实践方案。通过对比rosserial方案,重点阐述了micro-ROS基于XRCE-DDS协议栈在数据可靠性(丢包率低于1%)、双模式通信(UDP/串口)以及C/C++混合编程方面的优势,为嵌入式设备与ROS2的高效通信提供了完整解决方案。 阅读详情
asp.net在客户端触发服务器端事件分为两种情况:
一.   WebControls 中的 Button HtmlControls 中的 Type submit HtmlInputButton
这两种按钮最终到客户端的表现形式为: < input type ="submit" value ="Submit"> ,这是 Form 表单的提交按钮,点击以后会作为参数发送到服务端,参数是这样的:
控件的 name 属性 = 控件的 value 值,对应上面的例子就是: Submit1= Submit 。服务器端会根据接收到的控件的 name 属性的这个 key 来得知是这个按钮被点击了,从而在服务端触发这个按钮的点击事件。
二.   HtmlControls 中的 Type button HtmlInputButton 和其它所有的控件事件,比如 LinkButton 点击, TextBox Change 事件等等:
这些事件在客户端产生后会经过一个统一的机制发送到服务端。
1. 首先 asp.net 页框架会使用两个 Hidden 域来存放表示是哪个控件触发的事件,以及事件的参数:
< !― 表示触发事件的控件,一般是这个控件的 name -->
< input type ="hidden" value ="" />
< !― 表示触发事件的参数 , 一般是当某个控件有两个以上的事件时,用来区别是哪个事件 -->
< input type ="hidden" value ="" />
2. 服务端会生成一个 jscript 的方法来处理所有这些事件的发送,这段代码是:
< script language ="javascript" type ="text/javascript">
    function __doPostBack(eventTarget, eventArgument)
    {
        var theform = document.WebForm2;
        theform.__EVENTTARGET.value = eventTarget;
        theform.__EVENTARGUMENT.value = eventArgument;
        theform.submit();
    }
< / script >   

3. 每个会引发服务端事件的控件都会在响应的客户端事件中调用上面的代码:
比如, HtmlControls 中的 Type button HtmlInputButton 的点击事件
< !― 客户端的点击事件调用 __doPostBack eventTarget 参数为 'Button2' ,表示是 name 'Button2’ 控件触发的事件, eventArgument 为空,表示这个 Type button HtmlInputButton 只有一个客户端触发的服务端事件 -->
< input language="javascript" Button2','')" type="button"   value="Button" />
又比如, TextBox 控件的 Change 事件
< !― 客户端的 onchange 事件调用 __doPostBack eventTarget 参数为 ’TextBox1’ ,表示是 name ’TextBox1’ 控件触发的事件,而 TextBox 控件只有一个客户端触发的服务端事件 TextChanged ,故服务器就会去触发这个 TextBox TextChanged 事件 ->
< input type="text" TextBox1','')" language="javascript" />
4. 客户端触发事件后调用 __doPostBack 方法,将表示触发的控件源的 eventTarget 和事件参数 eventArgument 分别付给两个隐藏域 __EVENTTARGET __EVENTARGUMENT ,然后提交 Form ,在服务端根据 __EVENTTARGET __EVENTARGUMENT 来判断是哪个控件的什么事件触发了。
第二章 PostBack 的原理
__doPostBack 是一个纯粹并且是非常简单的 javascript 函数,大部分的页面 PostBack 都是由它触发的。注意,这里是 大部分 ,因为只有两个 Web Server Control    会自己触发页面的 PostBack, 其它的所有控件都是通过 __doPostBack 函数触发页面的 PostBack ,那先来看一下这个函数的定义吧:
CODE1:
< 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();
}
}
通过上面的代码可以看到, __doPostBack 带有两个参数, eventTarget 是标识将要引发页面 PostBack 的控件 ID eventArgument 参数提供了在引发页面 PostBack 事件时所带的额外参数。当然这个函数被函数时,这两个参数的值将赋值给页面的两个隐含变量 __EVENTTARGET __EVENTARGUMENT ,然后调用页面的 submit 方法提交页面表单。这就是为什么我们可以通过 Request.Form[“__EVENTTARGET”] 获取得到引发页面 PostBack 的控件 ID 的原因。
了解了 __doPostBack 函数后,我们可以很容易的利用它非常方便地自己触发自定义的 PostBack 事件。那上面也说了,大部分的控件都是调用
第三章 Button PostBack 做法
引了页面的 PostBack ,只有两个控件是例外, 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();
}
}
2 )利用 GetPostBackEventReference 给客户端生成 __doPostBack()
如:
比如前台页面
< asp:Button id ="Button1" runat ="server" Text ="Button">< / asp:Button >
1
< a href ="#" onclick ="document.getElementById('Button1').click()"> 触发服务器端按钮事件 < / a >
2
利用 GetPostBackEventReference 给客户端生成 __doPostBack()
前台
< a href ="#" onclick ="< %=PostBack()%>"> 触发服务器端按钮事件 < / a >
后台
protected string PostBack()
         {
            
return this .Page.GetPostBackEventReference( this .Button1,"haha");
         }
通过 __EVENTARGUMENT="haha" 可以判断是不是点了那个链接的 PostBack Button1 的按钮事件这么写:
if (Request["__EVENTARGUMENT" ]=="haha")
             {
                 Response.Write("
这个是链接的 PostBack");
             }
            
else
             {
                 Response.Write("
这个不是链接的 PostBack");
             }


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] 为什么你的脚本明明没报错,却什么也没发生? Python脚本运行后没报错却没结果?这是许多开发者遇到的棘手问题。文章分析了六种常见原因:代码未进入目标逻辑分支、输出路径错误、中间数据为空、异常被吞掉、异步操作未完成、运行了错误脚本版本。建议通过"过程可视化"排查,如打印关键变量、检查工作目录、验证数据状态等。职场中更应关注结果验证而非单纯代码执行,确保脚本真正解决问题。建立结果验证意识是从"会写代码"到"稳定交付"的关键转变。 阅读详情

相关推荐

融合Retinex理论与Transformer的YOLOv8低光照目标检测增强方法【YOLOv8】

图像分解:将输入图像分解为光照成分和反射成分。光照估计:估计光照图以消除暗光区域。图像重建:将光照增强后的反射图像重建成最终图像。Retinexformer通过在Transformer中引入Retinex的图像增强思路,使得低光照图像的细节能够得到充分保留。本文提出了一种基于Retinexformer的低光照增强方法,用于改进YOLOv8模型在夜间和低光照环境下的目标检测性能。

博客 1857

页面回传与js调用服务器端事件

第一章、 Asp.net中服务端控件事件是如何触发Asp.net 中在客户端触发服务器端事件分为两种情况:一.   WebControls中的ButtonHtmlControls中的Type为submitHtmlInputButton这两种按钮最终到客户端的表现形式为:input type="submit" value="Submit">,这是Form表单的提交按钮,点击以后会

gsk99的专栏 1061

华为od 面试八股文_JAVA语言_01_含答案

华为od 面试八股文_JAVA语言_01_含答案

MISAYAONE的博客 4144

asphtml控件添加服务器端事件

input 为例,为 input 设置属性为 runat="server" ,然后就可以为 input 设置 OnServerClick 属性: 后台方法为: protected void Button1_OnServerClick(object sender, EventArgs e) { throw new NotImplem

CSDNCRAB的博客 791

aspnet企业级开发:为html控件添加事件

1 }else if(e.Row.RowType == DataControlRowType.Pager){ 2 3 if (select == null) 4 { 5 select = new HtmlSelect(); 6 select.I...

weixin_30872671的博客 184

使用方法GetPostBackEventReference 得到回发脚本

 1.为HTML客户端控件增加回发功能一般页面中的按钮并不都是type=submit类型的,大部分是type=button类型的按钮,把上面5.2.2.1节的代码段中的type=submit修改成type=button,修改后的代码如下:output.Write("this.UniqueID + " Value=[使用提交按钮] />");由

mox_bobotao的专栏 618

asp.net mvc 使用Ajax调用Action 返回数据。

使用asp.net mvc 调用Action方法很简单。 一、无参数方法。 1、首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择。 <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> ...

291

客户端触发服务器端事件

asp.net客户端触发服务器端事件分为两种情况:一.   WebControls中的ButtonHtmlControls中的Type为submitHtmlInputButton这两种按钮最终到客户端的表现形式为:input type="submit" value="Submit">,这是Form表单的提交按钮,点击以后会作为参数发送到服务端,参数是这样的:控件的name属性=

我的专栏 1188

__doPostBack的总结

1.__doPostBack是什么,有什么用?   __doPostBack属于javascript的一个方法,是用于客户端服务器提交信息,从而调用后台。asp.net服务器控件都会自动调用__doPostBack脚本。2.__doPostBack的参数怎

在坑中上爬,在打击中成长 3789

Asp.net中服务端控件事件是如何触发的(笔记)

<br />http://www.cnblogs.com/yangtongnet/archive/2011/02/12/1952875.html<br /> Asp.Net 中在客 户端触发服务器端事件分为两种情况:一.   WebControls中的ButtonHtmlControls中的Type为submitHtmlInputButton这两种按 钮最终到客户端的表现形式为:<inputtype="submit"value="Submit">,这是Form表单的 提交按钮,点击以后会作为参数发送到

gahetgidt的专栏 756

js触发asp.netButton的Onclick事件

<br />在asp.net引入事件驱动之后,在一个页面上很容易解决多个按钮触发不同事件的问题,避免了在asp中需要多个form或者通过js脚本来控制 的麻烦。<br />asp.net带来便利的同时,也带来一个问题。在实际应用中一个页面存在多个按钮的情况并不多。用户习惯于在输入框输入内容之后,直接按回车就提 交表单了。由于asp.net采用的是事件驱动模式,所以默认用户按回车并没有触发按钮的onclick事件。用户按回车也不是没有提交表单,通过httpwath可以看到,实际上页面表单是提交到了form下的

pclook的专栏 2034

Asp.net中的JavaScript使用之二服务器控件的客户端事件

<br /><br />我们经常感叹于Asp.net中的服务器控件的易用,基于事件机制的web应用程序编写的方便。但是强大的服务器控件偶尔也会给初学者带来一些困惑,比如button按钮的onClick事件是一个服务器端事件,假如我们想在客户端处理button按钮的单击事件呢?值得庆幸的是:.net专门为Button、ImageButton、LinkButton三种按钮添加了OnClientClick属性,如果要在客户端执行某个方法,可以直接给OnClientClick属性赋值,但是其它没有该项属性的控件要

oheasycg的专栏 679

ASP.NET GetPostBackEventReference

  1.__doPostBack("id","")方法  2.GetPostBackEventReference方法作用  3.客户端如何触发服务器端控件的事件  右边提供程序用此方法实现在客户端单击按钮后,禁用此按钮,直到程序运行完毕再开启按钮。(单击右边下载)  下面再举个小例子.  前台页面  有个服务器控件 <asp:Button id="Button1" runat="serve...

u014712365的博客 150

深入理解 __doPostBack

第一章、 Asp.net中服务端控件事件是如何触发Asp.net 中在客户端触发服务端事件分为两种情况:    一.   WebControls中的ButtonHtmlControls中的Type为submitHtmlInputButton    这两种按钮最终到客户端的表现形式为: ,这是Form表单的提交按钮,点击以后会作为参数发送到服务端,参数是这样的: 控件的name属性=控件

tony990的专栏 1098

input type="submit",触发后台事件出现问题

input type="subm form id="form1" name="form1" runat="server">    p>       label for="name">          工号:br />          input id="name" type="text" name="name" placeholder="ID" runat

Jacky的专栏 5252

客户端回调服务器端事件

<br />在 ASP.NET 网页的默认模型中,单击按钮或执行导致回发的一些其他操作。此时将重新创建页及其控件,并在服务器上运行页代码,然后返回给浏览器,并呈现出来。但是,在有些情况下,需要从客户端运行服务器代码,而不执行回发。如果页中的客户端脚本维护一些状态信息(例如,局部变量值),那么发送页和获取页的新副本就会损坏该状态。此外,页回发会导致处理开销,这会降低性能,且会让用户不得不等待处理并重新创建页。<br />若要避免丢失客户端状态并且不导致服务器往返的处理开销,可以对 ASP.NET 网页编码,使

a282421083的专栏 3008

ASP.NET页面回发与事件回传

         页面事件顺序是固定的,但页面上的控件事件则依赖具体页面和用户的操作。如果控件的AutoPostBack属性设置为true(默认值为false),那么将立刻引起页面回发,即页面中各个控件的值回传到Web服务器上,引发相应事件,由事件的处理程序处理。处理完成后如果没有跳转指令,该页面将再此发送到客户端的浏览器上。如果控件的AutoPostBack属性设置为false,那么它的事件将不

dodream的专栏 5304

JQ调用后台方法

首先,先在页面上创建一个asp按钮添加点击事件,把要在前台调用的后台方法写在这个按钮的点击事件中: <span style="display:none;"><asp:Button ID="btnSelectCategory" runat="server" type="button" OnClick="btnSelectCategory_Click" ...

weixin_30408309的博客 187

ASP.NET WebForm--事件

当我们在 浏览器 地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程序类后,ASP.NET运行时将调用处理程序的 ProcessRequest 方法来处理请求、创建页面对象。Page_Load 子例程会在页面每次加载时运行。aspx初始化时触发,只执行一次,常用于页面初始化,并且执行在page_load之前,如果在aspx的程序中需要使用该方法,那么该方法的类需要继承 System.Web.UI.Page。

不求上进的码农的博客 1241

.Net中控制控件的postback是通过这个js函数控制的

.Net中控制控件的postback是通过这个js函数控制的: &lt;script language="javascript" type="text/javascript"&gt; &lt;!-- function __doPostBack(eventTarget, eventArgument) { var theform; if (window.navigator.app...

飞奔的火鸟 232

Asp.net按钮的前台和后台事件

今天遇到一个很奇怪的问题:页面A中点"下一步",跳到页面B,页面B的page_load中作了一个数据库操作,结果每次都发现页面B中的数据库操作执行了两次.(而不是一次)我反复测试B页面,都没有问题.后来发现,其实问题出在页面A.美工作页面A的时候,给按钮加入的一段前台javascript事件,而我直接把这个按钮设置为服务器控件,然后家了一个后台事件.后台事件中,也包含了跳转这个页面的程序.形成如下

xxpyeippx的专栏 2103

基于STM32单片机智能手表GSM短信上报GPS定位设计.zip

本设计由STM32单片机+LCD1602液晶显示电路+GPS模块+GSM模块+按键电路+LED灯电路+电源电路组成。1、液晶1602显示时钟,带日期,且可以显示经纬度信息,两个信息通过一个按键切换显示。2、通过GPS定位,获取当前的经纬度信息(可以通过浏览器查看具体位置)。3、通过电位器可以调节液晶屏的清晰度。4、具有手电筒功能,通过另外一个按键,按下,灯亮,再次按下,灯灭。5、通过第3个按键来发送经纬度信息给指定手机,按下后,开始发短信。6、短信处理过程有指示灯显示。 7、接受短信的手机号码可以主动获取经纬度信息,发送"GET"给设备手机号,设备会回复信息给发送者。8、GSM模块是SIM800A,该模块和SIM900A电路程序完全兼容外观外形一模一样。程序源码 电路图 任务书 答辩技巧 开题报告 参考论文 系统框图 程序流程图 使用到的芯片资料 器件清单

AT-Link_V1.2.20_zip_AT-link_

AT-Link_V1.2.20.zip ATLINK 驱动及用户手册

上一篇: c#非托管
下一篇: 刷新页面时“弹出点击确定重发消息刷新页面”的解决方案
klan
博客等级 码龄24年 26粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值