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

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();
            }
      }
}

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

时间: 2024-08-01 12:00:50

Asp.Net的控件如何与Server交互的相关文章

ASP.Net分页控件发布

asp.net|分页|控件 由于.net自带的分页功能极其死板,自定义性不强不能满足需求,俺花了一个多星期的时间 写成的一个.net分页控件. 特性: 1.支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以 2.支持url方式分页,url分页的每一页都可以被搜索引擎搜到,并且支持url重写 3.控件样式可自定义 4.封装完全,使用过程序只需写一行代码   1 /******************************************

亲密接触ASP.Net(3) asp+中的控件

最近有朋友问我,哪里可以学好ASP+,我早就说过NGWS中带的文档是最好的学习手册,不过由于NGWS的要求太高,还有它的大小(110M)的问题,有一部分兄弟,不能装上它,我给你们一个站点http://www.aspnextgen.com/quickstart/aspplus/ ,上面的文档就是NGWS直接带的,而且这个站点全是由asp+构建的,大家可以直接看到aspx的执行情况,我现在对我们的站点唯一不满的地方就是不能执行aspx,不能给大家看到例程的执行结果. 好了不说多话了,我们这一节要来看

ASP.NET验证控件祥解

asp.net|控件 ASP.NET是微软推出的下一代WEB开发工具,其强大的功能立即吸引了一大批WEB开发者投入它的靡下.现在,我们来看看ASP.NET的验证控件,感受ASP.NET的强大功能同时方便我们现在的WEB开发. WEB开发者特别是ASP开发者,一直对数据验证比较恼火,当你好不容易写出数据提交程序的主体以后,还不得不花大把时间去验证用户的每一个输入是否合法.如果开发者熟悉javascript或者VBScript,可以用这些脚本语言轻松实现验证,但是又要考虑用户浏览器是否支持这些脚本语

ASP.NET验证控件祥解(转)

asp.net|控件 ASP.NET验证控件祥解 ASP.NET是微软推出的下一代WEB开发工具,其强大的功能立即吸引了一大批WEB开发者投入它的靡下.现在,我们来看看ASP.NET的验证控件,感受ASP.NET的强大功能同时方便我们现在的WEB开发. WEB开发者特别是ASP开发者,一直对数据验证比较恼火,当你好不容易写出数据提交程序的主体以后,还不得不花大把时间去验证用户的每一个输入是否合法.如果开发者熟悉JavaScript或者VBScript,可以用这些脚本语言轻松实现验证,但是又要考虑

Cutting Edge:使用客户端行为扩展ASP.NET DataGrid 控件

asp.net|datagrid|客户端|控件 Cutting Edge:使用客户端行为扩展ASP.NET DataGrid 控件 (可拖动列和客户端排序) 英文原文:Extend the ASP.NET DataGrid with Client-side Behaviors作者:Dino Esposito翻译:MasterLRC源码:CuttingEdge0401.exe 如同比萨饼厨师的擀面杖,DataGrid 控件,对于一个熟练的ASP.NET开发者来说是非常基本而且有用的工具(译者:老外

转:ASP.NET验证控件详解

asp.net|控件|详解 ASP.NET验证控件详解 ASP.NET是微软推出的下一代WEB开发工具,其强大的功能立即吸引了一大批WEB开发者投入它的靡下.现在,我们来看看ASP.NET的验证控件,感受ASP.NET的强大功能同时方便我们现在的WEB开发. WEB开发者特别是ASP开发者,一直对数据验证比较恼火,当你好不容易写出数据提交程序的主体以后,还不得不花大把时间去验证用户的每一个输入是否合法.如果开发者熟悉JavaScript或者VBScript,可以用这些脚本语言轻松实现验证,但是又

使用 ASP+ 列表绑定控件 (转自ms 一)

asp+|控件 使用 ASP+ 列表绑定控件Nikhil KothariMicrosoft Corporation 2000年7月 摘要: 说明 ASP+ Repeater.DataList 和 DataGrid 服务器控件.这些控件能够实现一个根植于数据源的,基于 HTML 的应用程序用户界面.讨论与这些控件有关的概念并概要介绍使用这些控件的基本示例. 目录简介 列表绑定控件是如何工作的? Repeater 控件 DataList 控件 DataGrid 控件 Repeater.DataLis

动态加载Asp.net分页控件

asp.net|动态|分页|加载|控件 动态加载Asp.net分页控件 郑佐2004-11-30 在asp.net中动态加载控件比较简单,这里我讲得是对用户控件的加载,比较典型的就是被加载的用户控件里面包含回发事件,在回传回来的时候需要保持新的数据. 先来构建分页用户控件,由于前面几篇文章都在讲这些东西,所以就直接拿过来改了改,分页代码可以查看上面的文章1,文章2,下面是用户控件的一部分代码. public class PagingControl : System.Web.UI.UserCont

使用反射将业务对象绑定到 ASP.NET 窗体控件

asp.net|对象|控件 John DyerDallas Theological Seminary 适用于:Microsoft Visual Studio 2005 及早期版本ASP.NET 1.1C# 编程语言Visual Basic 编程语言 摘要:使用反射以单行代码将业务对象绑定到 ASP.NET Web 窗体,从而降低复杂性并减少错误.(本文包含一些指向英文站点的链接.请注意,在示例文件中,程序员的注释使用的是英文,本文中将其译为中文是为了便于读者理解.) 下载 MSDFormBind