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

Asp.net 中在客户端触发服务端事件分为两种情况:

一.     WebControls中的Button HtmlControls中的TypesubmitHtmlInputButton

这两种按钮最终到客户端的表现形式为: <input name="Submit1" id="Submit1" type="submit" value=”Submit”>,这是Form表单的提交按钮,点击以后会作为参数发送到服务端,参数是这样的: 控件的name属性=控件的value值,对应上面的例子就是:Submit1= Submit 服务端会根据接收到的控件的name属性的这个key来得知是这个按钮被点击了,从而在服务端触发这个按钮的点击事件。

二.     ImageButton或者HttpInputImage:

这些控件到客户端的表现类似这样的: <input type=image id=img1>,点击了这样的控件会直接提交表单,作用同提交按钮。点击了这样的控件传到服务端的参数是这样的:id.x=nn&id.y=nn,对应到上面的例子就是:img1.x=nn&img1.y=nn

三.     HtmlControls 中的 TypebuttonHtmlInputButton 和其它所有的控件事件,比如LinkButton点击,TextBoxChange事件等等:

这些事件在客户端产生后会经过一个统一的机制发送到服务端。

1.       首先asp.net页框架会使用两个Hidden域来存放表示是哪个控件触发的事件,以及事件的参数:

<!—表示触发事件的控件,一般是这个控件的name -->

<input type="hidden" name="__EVENTTARGET" value="" /> 

<!—表示触发事件的参数,一般是当某个控件有两个以上的事件时,用来区别是哪个事件 -->

<input type="hidden" name="__EVENTARGUMENT" value="" />

2.       服务端会生成一个jscript的方法来处理所有这些事件的发送,这段代码是:

<script language="javascript">

<!--

  function __doPostBack(eventTarget, eventArgument) {

         var theform = document.WebForm2;

         theform.__EVENTTARGET.value = eventTarget;

         theform.__EVENTARGUMENT.value = eventArgument;

         theform.submit();

  }

// -->

</script>

3.       每个会引发服务端事件的控件都会在响应的客户端事件中调用上面的代码:

比如,HtmlControls 中的 TypebuttonHtmlInputButton的点击事件

<!—客户端的点击事件调用__doPostBackeventTarget 参数为'Button2',表示是name'Button2’控件触发的事件,eventArgument 为空,表示这个TypebuttonHtmlInputButton只有一个客户端触发的服务端事件-->

<input language="javascript" οnclick="__doPostBack('Button2','')" name="Button2" id="Button2" type="button"  value="Button" />

 

又比如,TextBox控件的Change事件

<!—客户端的onchange事件调用__doPostBackeventTarget 参数为’TextBox1’,表示是name’TextBox1’控件触发的事件,而TextBox控件只有一个客户端触发的服务端事件TextChanged,故服务器就会去触发这个TextBoxTextChanged事件->

<input name="TextBox1" type="text" id="TextBox1" οnchange="__doPostBack('TextBox1','')" language="javascript" />

4.       客户端触发事件后调用__doPostBack方法,将表示触发的控件源的eventTarget 和事件参数eventArgument分别付给两个隐藏域__EVENTTARGET__EVENTARGUMENT,然后提交Form,在服务端根据__EVENTTARGET__EVENTARGUMENT来判断是哪个控件的什么事件触发了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值