首页 / 更多教程 / __doPostBack 方法解析
__doPostBack 方法解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了__doPostBack 方法解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3861字,纯文字阅读大概需要6分钟。
内容图文
function __doPostBack(eventTarget, eventArgument)的eventTarget参数是引起回送的控件的ID,eventArgument参数是回调参数(与控件相关的附加数据)。
当如果是删除时,eventArgument参数是Delete开头;当如果是插入时,eventArgument参数是Insert开头;当如果是编辑时,eventArgument参数是Edit开头;当如果是选择时,eventArgument参数是Select开头。
客户端触发事件后调用__doPostBack方法,将表示触发的控件源的eventTarget和事件参数eventArgument分别付给两个隐藏域__EVENTTARGET和__EVENTARGUMENT,然后提交Form,在服务端根据__EVENTTARGET和__EVENTARGUMENT来判断是哪个控件的什么事件触发了。
只有两个Web Server Control会自己触发页面的PostBack, 其它的所有控件都是通过__doPostBack函数触发页面的PostBack,页面解析时回将该类生成一个__doPostBack(eventTarget, eventArgument)方法。这两个参数分别由隐藏的两个表单域__ EVENTTARGET和__ EVENTARGUMENT保存。使用这两个隐藏的表单可以查找引起页面回送的控件ID和回送时的参数。然后就可以在后台用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控件ID和参数。当你触发__doPostBack事件时,遍历this.Request.Form.AllKeys,你查看到这两个隐藏的表单。
__VIEWSTATE:页面状态信息在客户端的存储(ViewState中存储的信息, EnableViewState="true"的控件状态信息).
__EVENTTARGET:页面回传触发事件 页面回传触发事件:
__doPostBack(‘Button2‘,‘‘)表示调用按钮Button2在后端的所对应的单击事件控件回传触发事件:
__doPostBack(‘TEST1$Button1‘,‘‘)表示调用TEST1控件中的Button1按钮的Click方法
__EVENTARGUMENT:页面回传触发事件时所带的参数 如:__doPostBack(‘Button1‘,‘aa‘)在后端可以使用Request.Form["__EVENTARGUMENT"]来取得
.net自动生成的一些客户端的代码用来回传数据和自己带的一些脚本函数。
Asp.net的postback机制我们知道Asp.net输出到客户端时都会被转化为HTML,页面Render到Client后,Client的HTML代码将包含如下代码:
1 <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
2 3 <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
4 5 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA0NDQ2OTE5OWRk281L4eAk7iZT10hzg+BeOyoUWBQ=" />
6 7 <script type="text/javascript">
8 9var theForm = document.forms[‘form1‘];
10if (!theForm)
1112 {
1314 theForm = document.form1;
1516 }
171819function __doPostBack(eventTarget, eventArgument)
2021 {
2223if (!theForm.onsubmit || (theForm.onsubmit() != false))
2425 {
2627 theForm.__EVENTTARGET.value = eventTarget;
2829 theForm.__EVENTARGUMENT.value = eventArgument;
3031 theForm.submit();
3233 }
3435 }
36 </script>
其中隐藏字段_EVENTTARGET代表触发事件的控件。_EVENTARGUMENT代表事件的额外参数。为了页面能在PostBack后依然能读取服务器控件原有的状态数据,Asp.net中使用了ViewState技术,而ViewState技术本质上是用一个默认名称为__VIEWSTATE的Hidden类型表单域来保存和传递数据(这些数据是经过了序列化后Base64编码的字符串值)。控件的事件被Render后事件变成javascript:__doPostBack(‘Button1‘,‘‘)
例如下面的样子
1
<
input
type
="button"
name
="Button1"
value
="Button1"
onclick
="javascript:__doPostBack(‘Button1‘,‘‘)"
id
="Button1"
/>
不过,另外要注意的就是asp.net的webcontrols中,Button和ImgButton是异类,它们不是利用__doPostBack来实现postback的。为什么这样,可能因为Button在html中本来就是有触发submit事件的功能吧。asp.net不过是要令原来html中一些不能触发submit的东西submit,才弄出了__doPostBack来实现。对于原来就能submit的Button,又何必多此一举呢。
如上写法可以在后台找到Button。为什么这样? 不知道, 在Button的提交过程中,Button会将Button本身的ID作为Request.Form的一个Key,它的Value是Button的Text属性值,回传给服务器。所以可以在后台循环Form.Keys取到所提交的Button,以执行相应的函数.ImgButton也差不多,不同就在于,它不是用ImageButton的ID作为Request.Form的Key,它是用ImageButton的ID加上.x和.y作为Key,在Request.Form添加两上键值对,这两个键值应该是对应ImageButton的图片大小的,了解了这个规律后,我们仍然可以通过一定的方式得到是否是由ImageButton引发的PostBack。
例子:
下拉列表触发PostBack
在 index.aspx 文件:
1 狀態:<asp:DropDownList ID="Ddl_Status" runat="server" AutoPostBack="true" onselectedindexchanged="Ddl_Status_SelectedIndexChanged">
2 <asp:ListItem></asp:ListItem>
3 <asp:ListItem Value="派工中">派工中</asp:ListItem>
4 <asp:ListItem Value="已完成">已完成</asp:ListItem>
5 </asp:DropDownList></td></tr>
1 <script type="text/javascript">
2var theForm = document.forms[‘form1‘];
3if (!theForm) {
4 theForm = document.form1;
5}
6function __doPostBack(eventTarget, eventArgument) {
7if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
8 theForm.__EVENTTARGET.value = eventTarget;
9 theForm.__EVENTARGUMENT.value = eventArgument;
10 theForm.submit();
11 }
12}
13 </script>
在 index.aspx.cs 文件:
1
protected
void Ddl_Status_SelectedIndexChanged(object sender, EventArgs e)
2 {
3 PG_DataBind(); //自定义的调用方法4 }
原文:https://www.cnblogs.com/rxhuiu/p/9228256.html
内容总结
以上是互联网集市为您收集整理的__doPostBack 方法解析全部内容,希望文章能够帮你解决__doPostBack 方法解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。