• Asp.Net的控件如何与Server交互


    以前写asp的程序的时候,知道只有type设置为submit的按钮,才能触发表单提交数据给服务器端。
    如:Asp.Net中的Button就是等于<input type="submit">.
    但是现在Asp.Net的好多控件都可以任意的和服务器端交互,如:LinkButton.
    这是怎么实现的呢?
    难道是一种全新的方式吗?
    其实,这只是微软的一种变通的方式。
    我们先来看看客户端的代码是如何的.
    我这里是一个带有LinkButton的页面,
    其实LinkButton在客户端就等于html里的A.
    我们来看看LinkButton为什么也能和服务器端交互?
    当我们点击右键查看该页面的源代码时,看到:

    <script type="text/javascript">
    <!--
    var theForm = document.forms['ctl00'];
    if (!theForm) {
        theForm = document.ctl00;
    }
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }
    // -->
    </script>

    <a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">Click Me</a>
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    从上面的代码中就可以看出simpleLinkButton1是一个链接,通过客户端代码来提交所在的表单。
    而其中两个隐藏域,则用来交换数据的,就是把__doPostBack的两个参数值赋给这两个隐藏域。
    这就是为什么LinkButton也具有提交数据的最直观的原因。

    那么这上面的代码是怎么生成的呢?
    我们看LinkButton的源代码就可以清楚地知道:
    protected internal override void OnPreRender(EventArgs e)
    {
          base.OnPreRender(e);
          if ((this.Page != null) && this.Enabled)
          {
                this.Page.RegisterPostBackScript();
                if ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
                {
                      this.Page.RegisterWebFormsScript();
                }
          }
    }

    以上只是把自己在学习工作过程中的一些体会记录如此,防止自己忘记了。
    也望和大家多多交流!

  • 相关阅读:
    4.文本编辑器vi的简单实用与指针介绍
    3.理解make命令——编译源文件安装
    2.换一种方式理解linux命令行
    1.linux环境搭建
    Tomcat 何时解压war包
    正则表达式8---再谈小括号
    利用vue-resource模拟百度下拉列表
    那些年iframe的坑(一)
    $nextTick()的理解
    一个超简单的vue商品计算总金额
  • 原文地址:https://www.cnblogs.com/maplye/p/489338.html
Copyright © 2020-2023  润新知