2011-12-27 37 views
4

我是.NET的初学者,我有一些疑虑。有人能帮我理清吗?如何在.NET中调用服务器端事件

  1. 当对文件的用户请求(* C++),该请求第一前进到IIS服务器,并使用处理程序和模块的帮助下找到的文件需要被处理并发送回型客户端。但是,在静音机器上显示时,.ASPX文件的内容将显示为HTML控件。客户端生成的事件如何发回服务器?

  2. 我知道runat = server告诉控件将在serverside处理。 但每次我们为什么需要写“runat = server”。有没有在客户端运行的ASP.NET控件?

+0

谢谢大家的指导...... – 2011-12-27 08:54:37

回答

1

,如果你开始使用.NET Web开发,ASP.NET MVC是去IMO

是产生在客户端浏览器事件的ASP.NET服务器控件锻炼标准DOM事件的方式通过JavaScript代码注入到从Web服务器发送的页面中。尝试从任何浏览器查看页面源代码,以查看实际生成的内容,并且图片将变得更清晰。

本质上runat =服务器告诉ASP.NET解析器处理标记并为页面生成一些特殊的HTML输出。请参阅GvS's explanation,该主题介绍了这些控件的客户端事件如何转换为在服务器上处理的表单POST。

http://www.w3schools.com/aspnet/aspnet_intro.asp

如何做ASP.NET工作?

当浏览器请求HTML文件时,服务器返回文件当浏览器请求ASP.NET文件时,IIS将请求传递给服务器上的ASP.NET引擎 ASP.NET引擎读取文件,行 一行,并在文件中执行脚本最后,ASP.NET 文件返回给浏览器作为纯HTML

也看到

http://www.w3schools.com/aspnet/aspnet_controls.asp

http://www.w3schools.com/aspnet/aspnet_events.asp

4

HTTP请求/响应循环

enter image description here

HTTP是无状态协议 - 网络开发的另一个方面是从传统的桌面编程显着不同的是 事实HTTP本质上是一种无状态的有线协议。只要Web服务器发送对客户端浏览器的响应,就会忘记上一次交互的所有内容。在传统的桌面应用程序 中肯定不是这种情况,其中可执行文件的状态通常是活着的,并且直到 用户关闭应用程序的主窗口。

Asp.net是如何工作的?

  • 视图状态:为维护国家的实际机制跨请求 (被称为视图状态)是由所提供的HTML,然后贴来回服务器添加不同的控件隐藏字段做/客户。
  • 页面生命周期:连接客户端事件与服务器端事件处理程序代码(页面生命周期的一部分)的机制可能非常复杂并且非常微妙。很少有开发人员能够成功操作控制层次结构,而无需获取视图状态错误或发现某些事件处理程序神秘地无法执行。
  • 假的顾虑分离的感:ASP.NET的代码隐藏模型提供了一个 指取应用程序代码进行其HTML标记,并成为一个单独的代码隐藏 类。这在分离逻辑和演示中得到了广泛赞誉,但实际上,鼓励开发人员将演示代码 (例如,操纵服务器端控制树)与其应用程序 逻辑(例如操纵数据库数据)混合在这些相同的怪异代码隐藏 类。最终的结果可能很脆弱并且难以理解。
  • 对HTML的有限控制:服务器控件将自己呈现为HTML,但不是 必然是您想要的HTML。在ASP.NET 4之前,HTML输出通常不符合Web标准或使用级联样式表 (CSS),并且服务器控件生成难以使用JavaScript访问的难以预测和复杂的ID值,这些ID值为 。在ASP.NET 4中这些问题会减少,但是它的 仍然可能非常棘手以获得您期望的HTML。

内容

什么实际发生的是,当在IIS接收到用于.aspx文件的请求时,第一Asp.net与呈现在页面上的各种控制的隐藏状态相应的HTML。然后将该HTML发送给客户端。如果用户回帖,则从这些隐藏字段中检索值并使用。

+0

另外我想第二个理查德·洛格伍德关于从Asp.net MVC开始的回答,而不是传统的Asp.net。但是,如果你基本上是一个Windows程序员,那么你可以坚持传统的Asp.net开发,以加速和简化Web开发 – 2011-12-27 08:10:31

0

这些事件刚刚由服务器端控制器引发,当您点击一个asp按钮时,会在客户端捕获事件信息,并通过HTTP post .i将事件消息发送到服务器.i认为这些可能由某些注册事件在你的页面正在加载时,在你的页面框架上注册了一些事件,并通过http post请求产生。

看,客户端和服务器端控件之间的区别之一是服务器端在服务器端注册,您可以将其状态保存在视图状态中。当你点击一个服务器端按钮时,首先引发客户端事件,服务器端注意到由于服务器端控制着服务器上注册的事件,当你点击按钮时,你的页面被回发。但客户端控件只是在客户端有效,他们的事件刚刚为您提供网页浏览器

需要更多帮助?评论我编辑我的答案 方面,阿里

3

当你告诉“标签”runat="server",你告诉服务器注册标签。现在标签被包含在服务器上的控制/标签树中,并且可以在服务器上找到:当事件被触发时,或者属性或内容改变了服务器端。

客户端事件无声地转换为POST表单。再加上一些额外的信息,如控件的ID和事件的类型。

由于您的标记已在服务器上注册,因此它具有一个ID,该ID也会传输到客户端(查看html源代码)。这个树是在事件被“解雇”之前构建的,(通过解析.aspx文件)。使用此标识,您可以在服务器端控件/标记树中找到标记,然后运行用于处理事件的方法。

使用这些技术和许多ViewState,Asp.Net试图否认HTTP的无状态本质。起初这看起来是个好主意,恕我直言,它最好不要与大自然搏斗。目前ASP.Net MVC感觉更自然。

相关问题