EVENTTARGET EVENTARGUMENT VIEWSTATE

__VIEWSTATE:页面状态信息在客户端的存储(ViewState中存储的信息, EnableViewState="true"的控件状态信息).
__EVENTTARGET:页面回传触发事件 页面回传触发事件:__doPostBack('Button2','')表示调用按钮Button2在后端的所对应的单击事件 控件回传触发事件:__doPostBack('TEST1$Button1','')表示调用TEST1控件中的Button1按钮的Click方法
__EVENTARGUMENT:页面回传触发事件时所带的参数 如:__doPostBack('Button1','aa')在后端可以使用Request.Form["__EVENTARGUMENT"]来取得
.net自动生成的一些客户端的代码
用来回传数据和自己带的一些脚本函数
=====================================================================
function __doPostBack(eventTarget, eventArgument)的eventTarget参数是GridView控件的名字,eventArgument参数是命令字。当如果是删除时,eventArgument参数是Delete开头;当如果是插入时,eventArgument参数是Insert开头;当如果是编辑时,eventArgument参数是Edit开头;当如果是选择时,eventArgument参数是Select开头。

============================================================

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

哪个控件的什么事件触发了。

< script language="javascript">

  function __doPostBack(eventTarget, eventArgument) {

  var theform = document.WebForm2;

  theform.__EVENTTARGET.value = eventTarget;

  theform.__EVENTARGUMENT.value = eventArgument;

  theform.submit();

  }

< /script>

=================================================================

Asp.net的postback机制

我们知道Asp.net输出到客户端时都会被转化为HTML,页面Render到Client后,Client的HTML代码将包含如下代码:

<inputtype="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/> <inputtype="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/> <inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUKMTA0NDQ2OTE5OWRk281L4eAk7iZT10hzg+BeOyoUWBQ="/> <scripttype="text/javascript"> <!-- vartheForm=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>

其中隐藏字段_EVENTTARGET代表触发事件的控件。_EVENTARGUMENT代表事件的额外参数。为了页面能在PostBack后依然能读取服务器控件原有的状态数据,Asp.net中使用了ViewState技术,而ViewState技术本质上是用一个默认名称为__VIEWSTATE的Hidden类型表单域来保存和传递数据(这些数据是经过了序列化后Base64编码的字符串值)。

控件的事件被Render后事件变成javascript:__doPostBack('Button1','')例如下面的样子

<inputtype="button"name="Button1"value="Button1"οnclick="javascript:__doPostBack('Button1','')"id="Button1"/>

当按钮被点击后,触发了__doPostBack事件,_doPostBack事件把表单提交给Server,Server端通过__EVENTTARGET这个hidden field的值找到对应的Server端的Control.接下来Server查看Control是否实现调用Page的RaisePostBackEvent,这个函数的定义如下:

protectedvirtualvoidRaisePostBackEvent(IPostBackEventHandlersourceControl,stringeventArgument) {

sourceControl.RaisePostBackEvent(eventArgument); }

函数调用本控件内的

protectedvirtualvoidRaisePostBackEvent(stringeventArgument) {

base.ValidateEvent(this.UniqueID,eventArgument);i

if(this.CausesValidation)

{

this.Page.Validate(this.ValidationGroup);

}

this.OnClick(EventArgs.Empty);

this.OnCommand(newCommandEventArgs(this.CommandName,this.CommandArgument)); } OnCommand实现了你定义的控件的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值