zoukankan      html  css  js  c++  java
  • 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代码将包含如下代码:

    其中隐藏字段_EVENTTARGET代表触发事件的控件。_EVENTARGUMENT代表事件的额外参数。 为了页面能在PostBack后依然能读取服务器控件原有的状态数据,Asp.net中使用了ViewState技术,而ViewState技术本质上是用一个默认名称为__VIEWSTATE的Hidden类型表单域来保存和传递数据(这些数据是经过了序列化后Base64编码的字符串值)。控件的事件被Render后事件变成javascript:__doPostBack('Button1','')例如下面的样子当按钮被点击后,触发了__doPostBack事件,_doPostBack事件把表单提交给Server, Server端通过__EVENTTARGET这个hidden field的值找到对应的Server端的Control. 接下来Server查看Control是否实现调用Page的RaisePostBackEvent,这个函数的定义如下: protected virtual void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument) { sourceControl.RaisePostBackEvent(eventArgument); } 函数调用本控件内的protected virtual void RaisePostBackEvent(string eventArgument) { base.ValidateEvent(this.UniqueID, eventArgument); if (this.CausesValidation) { this.Page.Validate(this.ValidationGroup); } this.OnClick(EventArgs.Empty);this.OnCommand(new CommandEventArgs(this.CommandName, this.CommandArgument)); } OnCommand实现了你定义的控件的函数。 http://blog.csdn.net/yangzl2008/article/details/6723504

  • 相关阅读:
    Best Practices for Using Alpha
    Android手机 Fildder真机抓包
    Android调用MediaScanner进行新产生的媒体文件扫描
    读书笔记-----Java并发编程实战(二)对象的共享
    项目经验谈---IM新消息界面刷新异常处理记录
    读书笔记-----Java并发编程实战(一)线程安全性
    OnScroll与OnTouchEvent方法的区别与联系
    View的getLeft, getRight, getTop, getBottom
    如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN
    更改ubuntu mysql data目录位置
  • 原文地址:https://www.cnblogs.com/flyinghigher/p/2381702.html
Copyright © 2011-2022 走看看