文章标签 ‘ASP.NET’
[转载]ASP.NET 页生命周期和页面事件处理管道 – DebugLZQ – 博客园. ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括 初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达 到预期效果。此外,如果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件行为代码。 (控件的生命周期基于页的生命周期,但是页引发的控件事件比单独的 ASP.NET 页中可用的事件多。) 一般来说,页要经历下表概述的各个阶段。除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页。(有关更多信息,请参见 MSDN:ASP.NET 应用程序生命周期概述。) 我们知道最终我们在服务器上创建的页面对象是通过Page的一个派生类来创建的,这个类通常情况下是看不到的,包括类的名字也不是我们直接指定的。这个类是由ASP.NET服务器根据我们的页面模板文件aspx创建出来的,页面对象的ProcessRequest方法将会启动页面的生成过程。这个过程是通过页面的处理管道来完成的。 下表列出了最常用的页生命周期事件。除了列出的事件外还有其他事件;不过,大多数页处理方案不使用这些事件。而是主要由 ASP.NET 网页上的服务器控件使用,以初始化和呈现它们本身。如果要编写自己的 ASP.NET 服务器控件,则需要详细了解这些阶段。(有关创建自定义控件的信息,请参见MDDN:开发自定义 ASP.NET 服务器控件。 ) 注意事项(来自MSDN): 各个 ASP.NET 服务器控件都有自己的生命周期,该生命周期与页生命周期类似。例如,控件的 Init 和 Load 事件在相应的页事件期间发生。 虽然 Init 和 Load 都在每个控件上以递归方式发生,但它们的发生顺序相反。每个子控件的 Init 事件(还有 Unload 事件)在为其容器引发相应的事件之前发生(由下到上)。但是,容器的 Load 事件是在其子控件的 Load 事件之前发生(由上到下)。 可以通过处理控件的事件(如 Button 控件的 Click 事件和 ListBox 控件的 SelectedIndexChanged 事件)来自定义控件的外观或内容。在某些情况下,可能也需处理控件的 [...]
[转载]【认识aspx】页面处理程序【页面生成关系】【页面继承关系】 – DebugLZQ – 博客园. 对于 Web 开发来说,最重要的就是生成 HTML 页面,除了用流的方式一个字符一个字符地输出,有没有简单的方式来创建一个处理程序生成网页呢? 有!就是什么代码也不写的方式。当然,是我们自己不写,由程序生成。 对于网站开发来说,最常用的功能就是生成 HTML 网页,虽然通过处理程序再结合文本输出流,从理论上就可以生成任何网页,但是开发效率显然不容乐观。 为了从根本上解决这个主要的开发问题,ASP.NET 使用模板的方式来生成一个处理程序。模板的扩展名为 aspx ,通过一个内置的处理程序工厂 PageHandlerFactory 将 aspx 形式的模板编译生成处理程序代码,然后,将这个处理程序返回给 HttpApplication 完成请求的处理。aspx 形式的模板文件可以直接通过文本编辑器进行编辑,甚至可以通过 DreamWeaver 之类的网页设计软件进行排版,极大地提高了网站开发的效率,带来了网站开发技术的革命性升级。 在 ASP.NET 的系统配置文件中,已经进行了如下的配置,可以看到,对于扩展名为 aspx 的请求,将由 PageHandlerFactory 这个处理程序工厂进行处理,代码如下: <add path=”*.aspx” verb=”*” type=”System.Web.UI.PageHandlerFactory” validate=”True” /> 这个类定义在命名空间 System.Web.UI 下,具体的定义如下: public class PageHandlerFactory : IHttpHandlerFactory aspx 模板文件与 Page 类和生成类之间的关系如图所示: 需要注意的是, aspx 模板的解析和代码生成仅仅出现在第一次处理的时候,以后的请求将直接使用已经编译生成的程序集,所以,这个处理过程并不会降低网站的处理速度。 [...]
[转载]ASP.NET 利器:在Global.asax之外实现Application_Start/End,程式元件使用就要这么灵活! – kudy – 博客园. 在System.Web命名空间下, .NET 4.0版本新增了一个 PreApplicationStartMethodAttribute 类,利用它可以Appilcation_Start()前触发的初始化工作。这里主要讲Kudy.Net项目中的System.Kudy.Web.Activating。事实上System.Kudy.Web.Activating也是靠它来运作的,功能很相近但 PreApplicationStartMethodAttribute 有些限制,一是整个Web Application只能加载一次(AllowMultiple=false),如果多个元件都有自己的初始事件就没办法,二是它只提供 Appilcation_Start()前触发的选项,相较之下,System.Kudy.Web.Activating应用起来更方便,因充它允许多次 注册并且还有Appilcation_Start()后触发和Appilcation_End()前触发的选项。 System.Kudy.Web.Activating下提供了四个属性分别是ActivationAttribute、 PreApplicationStartAttribute、PostApplicationStartAttribute和 PreApplicationEndAttribute,利用它们可以灵活地随时在你的程序集中注册一个或多个Appilcation_Start()前/后触发和Appilcation_End()前触发的处理事件。下面来新建一个Web Application项目来测试它们。 下载例子源码:ActivatingWeb.rar ActivatingMvcWeb.rar 请使用vs2010打开项目,本文对你有帮助的话请点下推荐支持,或关注本博客,谢谢。 首先,引用System.Kudy程序集(注意:System.Kudy有.Net3.5和.Net4.0版本的,4.0版本才支持此功能)。新建ActivatingTest类,然后在里面再加上几个测试类,代码如下: ? using System; using System.Collections.Generic; using System.Linq; using System.Web; // 引用命名空间 using System.Kudy.Web.Activating; // 在程序集注册应用程序触发事件(建议写在:AssemblyInfo.cs) [assembly: Activation(typeof(ActivatingWeb.MyApplication))] [assembly: Activation(typeof(ActivatingWeb.MyApplication_2))] [assembly: PreApplicationStart(typeof(ActivatingWeb.MyStaticApplication), "PreStart")] [assembly: PostApplicationStart(typeof(ActivatingWeb.MyStaticApplication), "PostStart")] [assembly: PreApplicationEnd(typeof(ActivatingWeb.MyStaticApplication), "PreEnd")] namespace ActivatingWeb { public [...]
[转载]ASP.NET中使用V3版本的Google Maps API【译】 – sxwgf – 博客园. 写在最前面 早 就听说过Google Maps API了,但一直没用过,今天在CodeProject上看到了这篇关于Google Maps API(V3版本)使用的文章,觉得很容易上手,就将他翻译下来了,相信对初学者会有大的帮助。译文允许转载,但请在页面明显处标明以下信息,且保留完整 原文链接地址和译文链接地址,谢谢合作! 英文原文:Google Maps API V3 for ASP.NET 译文出处:青藤园 译文作者:王国峰 译文链接:ASP.NET中使用Google Maps API V3【译】 简介 Google Maps为我们提供了一种非常灵活的方式来使用它的地图服务。我们可以在Web应用程序中通过调用Google Maps API来为我们的用户提供方位信息、地理位置信息以及其他类型的东西。尽管已经有很多文章介绍了Google Maps API的使用方法,但这次我要介绍的是最新V3版本的Google Maps API。在这篇文章中,我们将会看到一些使用Google Maps的常见技术。为了能更好的理解下面的示例代码,你需要了解JavaScript和C#的基本知识。 你的第一个Google Maps 在Google Maps API的早期版本中,我们需要将自己的web应用程序注册至Google,从而获取一个API Key。然而随着新版本的发布,Google Maps的注册机制已经被淘汰了,但是最近Google又提出了一些使用地图的限制,你可以通过下面的链接获取Google Maps API的使用方法和一些使用条款:http://code.google.com/apis/maps/documentation/javascript/usage.html#usage_limits 。现在我们就开始在自己的网站下创建一个Google Maps地图示例,下面的一行代码是用来连接Google Maps API服务的: <script type=”text/JavaScript” src=”http://maps.googleapis.com/maps/api/js?sensor=false”> </script> 然后你可以用下面的代码来创建一个简单的地图: [...]
[转载]asp.net高性能之路:无缝切换HttpRuntime.Cache与Memcached,附代码 – Ray Wu – 博客园. 概述 之前网站一直使用ASP.NET自带的cache,也就是HttpRuntime.Cache。这个的优点是进程内cache,效率非常高,同时对于缓存的对象可以直接获得 引用,并进行修改,不需要再进行清空缓存。但是使用HttpRuntime.Cache,无法进行扩展,也无法使用web园等等。 方案 之前有看dudu写的关于northscale memcached的文章,觉得很不错,故进行了一下尝试。由于初次使用,出问题的时候要能随时切换回HttpRuntime.Cache, 故使用了策略模式,实现无缝切换缓存模式的功能。Memcached的封装类请在https://github.com/enyim/EnyimMemcached/downloads进行下载,我使用的是Northscale.Store.2.8 接口 View Code using System; using System.Collections.Generic; using System.Web; /// <summary> /// 缓存策略接口 /// </summary> public interface ICacheStrategy { void AddObject(string objId, object o); void AddObjectWithTimeout(string objId, object o, int timeoutSec); void AddObjectWithFileChange(string objId, object o, string file); //void AddObjectWithDepend(string objId, object [...]

