ASP.NET服务器端控件原理分析

服务器端控件触发事件分两种:

1.服务器端控件Button被渲染成客户端的

<input type="submit" name="Button1" value="Button" id="Button1" />

类型为type="submit"此类控件点击以后会通过form表单提交,点击以后会作为参数发送到服务端,参数是控件的name属性=控件的value值,服务器端会根据接收到的控件的name属性的这个值来得知是这个按钮被点击了,从而在服务端触发这个按钮的点击事件。

当我们在服务器端控件Button标签中加入name属性时,在前端渲染时服务器会将其去掉,这也证明了后台是通过name值来获取被点击的按钮名称的。

2.其他服务器端控件的后台事件触发

服务器会自动为服务器端控件的事件触发生成一个脚本:

 1 <script type="text/javascript">
 2 //<![CDATA[
 3 var theForm = document.forms[‘form1‘];
 4 if (!theForm) {
 5     theForm = document.form1;
 6 }
 7 function __doPostBack(eventTarget, eventArgument) {
 8     if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
 9         theForm.__EVENTTARGET.value = eventTarget;
10         theForm.__EVENTARGUMENT.value = eventArgument;
11         theForm.submit();
12     }
13 }
14 //]]>
15 </script>

然后在每个控件相应事件里加入js代码:
 <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">Click</a> 

以调用doPostBack向后台发送相应的触发信息,有两个参数,第一个是触发事件的控件名称,第二个是事件参数。

3.服务器会自动生成隐藏域 VIEWSTATE ,保存服务器控件的值,在页面回发时保存状态

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="dfH5nMWjX1dNSXzn46Y8JnrW6phZm5uVAKtEN6WJ9+0QH5o2vTLSkKi844UXjfMNj5w9xjbw+CveDXrKw6PmUBnHUp85WYCvEi9n8IHtvZ8=" />

时间: 2024-10-25 15:18:25

ASP.NET服务器端控件原理分析的相关文章

ASP.NET服务器端控件(class0617)

ASP.Net服务端基本控件介绍 ASP.Net服务端控件是ASP.Net对HTML的封装,在C#代码中就可以用txt1.Text=‘abc’这种方式来修改input的值,ASP.Net会将服务端控件转成HTML代码输出给浏览器.服务端控件是ASP.Net非常吸引初学者.非常容易上手的东西,也是最被人诟病的东西.物尽其用,服务端控件在内网系统.互联网系统的后台部分等访问频率不高的地方用的还是很适合的. (互联网公司,产品型公司(OA)) 在服务端控件的标签中写的属性如果不是控件内置的属性就会被原

javascript获取asp.net服务器端控件的值

代码如下: <%@ Page Language="C#" CodeFile="A.aspx.cs" Inherits="OrderManage_A" %> <%@ Register Src="../UserControl/CtrlCalendar.ascx" TagName="CtrlCalendar" TagPrefix="uc1" %> <html>

不使用ASP.NET服务器端控件(包括form表单不加runat=&quot;server&quot;)来触发.cs里的事件(方法),(适用于有代码洁癖者)。

很多时候,我们使用服务器端控件写出的代码,会给我们生成一些很多我们看不懂的代码(初学者),但是有时候我们并不需要这些代码(业务需求不同),对于生成的一些代码感到多余.所以我就开始想,有没有一种可能:不使用服务器端控件(包括form表单不加runat="server"属性)来触发后台写的某一个方法或事件(ASP.NET的事件实际上是使用事件机制来驱动的).经过测试是可以的. 原理:使用反射驱动方法. 步骤:    1.手写一个提交表单的js函数(可以使用asp.net的__dopostB

ASP.NET服务器端控件和HTML控件的比较 (转)

区别:服务器端控件都会有个runat="Server"属性,这样才能够在后台对其进行修改,也就是在cs代码里面能对其进行修改.例如,当你放个HTML控件时,在CS代码中引用不出控件名,但加上runat="Server" 后在CS代码中就能引用该控件了. 其实ASP.NET 的服务器控件解析后最终返回到前台还是HTML控件.例如当你建个页面并放一个asp:textbox上去,然后运行页面,查看页面源文件就会发现放上的服务器控件变成了HTML的inupt type=&q

ASP.NET--Web服务器端控件和Html控件

今天学习总结了一些相关概念和知识. 之前无论是做 单机的winform 还是 CS的winform 感觉,不到两年下来感觉还可以,虽然API有很多,但是还是比较熟悉基于WINDOWS消息机制的编程,但是现在网络硬件设施更新之快,BS 开发优势之大,不过需要的技术方面倒是得扩宽许多,JavaScript,CSS,Html都需要了解掌握,除webForm之外,对于现今主流的MVC更是需要学习. 概念: asp.net控件服务端控件  --> 响应服务端事件 HTML控件客户端控件   -- > 

JS触发ASP.NET服务器端控件的方法

<asp:Button ID="Button_regId" runat="server" Font-Bold="False" OnClick="HistoryPushMessage_Click" Text="添加" /> $("#<%=Button_regId.ClientID%>").click(); protected void HistoryPushMess

jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值

-.获取dropdownlist的text(ddlList为服务器端dropdownlist的ID,生成name属性等于ddlList的select标签) $("#ddlList option:selected").text() 二.获取dropdownlist的value(ddlList为服务器端dropdownlist的ID,生成name属性等于ddlList的select标签) $("#ddlList").val() 三.获取radiobuttonlist的t

.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器

1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.WebForm使用母版页进行登录时候的验证 //新建一个页面父类 public abstract class BasePage:Page { protected void Page_Load(object sender, EventArgs e) { //1.身份验证的方法 Session if (Se

Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结

Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示的字段(开始渲染) 1 1.2. 确认要显示的title 1 1.3. 格式化 1 2. Render显示级别 1 2.1. 简单化...grid.toHTML(); 1 2.2. 有些设置(title,field) 1 2.3. 完全的的设置(模板机制) 1 3. 服务器端控件跟模板的分离实现 2