zoukankan      html  css  js  c++  java
  • ASP.NET的客户端事件是如何映射成服务器端事件的

    在所有ASP.NET服务器控件中,只有Button和ImageButton能直接引发回传,当在这两种控件上触发事件时,控件的ID会作为参数传给服务器,从而使服务器得知该映射到哪个后端事件;其他控件则全部使用名为__doPostBack的javascript方法来触发回传。

    __doPostBack方法定义如下:

    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
    }
    }

    其中,__EVENTTARGET和__EVENTARGUMENT两个隐藏域会被自动声明,分别指向触发事件的控件ID和相应的附加参数(比如,该控件可触发多个事件,则附加参数会指明是哪个事件被触发而引起回传)ASP.NET正是通过这两个隐藏域的值来判断该如何将客户端事件映射为对应的服务器端事件的。

    例如:

    页面中添加一个TextBox控件,并将其AutoPostBack属性设为true:

    <aspextBox ID="TextBox1" runat="server"  AutoPostBack="true"></aspextBox>

    浏览页面并查看页面源码,会看到该TextBox控件被生成为类似如下的代码

    <input name="TextBox1" id="TextBox1" type="text"/>

    可以看到TextBox在浏览器端的onchange事件与__doPostBack()进行了关联,eventTarget传入实参为'TextBox1',eventArgument传入实参为''(因为只有这一个事件引发回传,无需指定附加参数)。

    相应的,在服务器端,可以以编码方式获得引发本次回传的控件的信息:

    protected void Page_Load(object sender, EventArgs e)
    {
      string scontrolName = Request.Params.Get("__EVENTTARGET");
    }
  • 相关阅读:
    后盾网-CI框架实例教程-马振宇
    后盾网-CI框架实例教程-马振宇
    CI框架-学习笔记
    慕课网--PHP进阶篇--学习笔记(2)
    慕课网--PHP进阶篇--学习笔记(1)(数组、类与面向对象)
    慕课网--PHP入门篇--学习笔记
    移动端知识转载收藏
    移动端web app自适应布局探索与总结
    IE6/IE7下:inline-block解决方案
    微信JS SDK Demo 官方案例
  • 原文地址:https://www.cnblogs.com/mazida6/p/2261957.html
Copyright © 2011-2022 走看看