ASP.NET 应用程序与页面生命周期(意译)

ASP.NET页面生命周期与状态管理详解 本文深入解析了ASP.NET中的页面生命周期、状态管理和常用控件的使用。内容涵盖会话与页面状态的概念,Page_Load事件的运用,视图状态、控件状态、会话状态和应用程序状态四种状态的特性,以及如何通过ViewState存储数据。同时,结合多个实践练习,演示了如何利用UpdatePanel实现部分页面更新、如何选择合适的控件如DropDownList、ListBox、RadioButton等,并介绍了AJAX控件扩展器如PopupControlExtender和RoundedCornersExtender的 阅读详情

1、引言

  1. 2、两个处理步骤
    1. 2.1、创建ASP.NET环境
    2. 2.2、用触发的MHPM事件处理请求
  2. 3、什么事件中应该做什么
  3. 4、示例代码
  4. 5、深入ASP.NET页面事件
1、引言

这篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事件的差异。因此,我们首先将介绍解ASP.NET请求的两个概括的步骤,接下来我们将介绍‘HttpHandler’,‘HttpModule’和ASP.NET页面对象发出的事件的差异。随着我们的事件旅程,我们将理解这些事件的逻辑。

2、两个处理步骤

ASP.NET请求处理可以总结为如下所示的两个处理步骤。用户发送一个请求到IIS:

  1. ASP.NET创建处理请求的环境。换句话说,创建应用程序对象、request、response和context对象去处理请求。
  2. 一旦环境已经创建,请求通过使用modules、handlers和page对象的一系列事件处理。为了简化可以称为MHPM(module、handler、page、module event),我们将在后面详细讨论。

应用程序与页面生命周期

图1、ASP.NET请求处理的两个步骤

在接下来的各节,我们将知道更多关于这两个步骤的细节。

2.1、创建ASP.NET环境

step 1:用户发送一个请求到IIS。IIS首先检查哪个ISAPI扩展可以处理这个请求,这取决于请求的文件扩展名。举例来说,如果请求页面是‘.ASPX’,它将被传送到‘aspnet_isapi.dll’来处理。

step 2:如果这是www站点的第一个请求,ApplicationManager类将创建一个应用程序域,www站点运行于其中。我们都知道在同一个IIS上,两个web应用程序的应用程序域是独立的(隔离的)。因此一个应用程序域中问题不会的影响到其它应用程序域。

step 3:新建的应用程序域创建宿主环境,如HttpRuntime对象。一旦宿主环境被创建,必要的ASP.NET核心对象如HttpContext、HttpRequest和HttpRespone对象也被创建。

step 4:一旦所有的ASP.NET核心对象被创建,HttpApplication对象将被创建去处理请求。如果系统中有global.asax文件,global.asax文件对象将被创建。请注意:global.asax文件继承自HttpApplication类。

注意:第一次ASP.NET页面连接到应用程序,一个HttpApplication新实例将被创建。为了最大化性能,HttpApplication实例可能被多个请求重用。

step 5:接下来HttpApplication对象分配给核心ASP.NET对象来处理页面。

step 6:然后HttpApplication通过HttpContext、HttpRequest和HttpRespone事件开始处理请求。它触发MHPM事件处理请求。更多细节

应用程序与页面生命周期

图2、创建ASP.NET环境

下图解释了ASP.NET请求的内部对象模型。最高层是ASP.NET运行时,它已经创建一个应用程序域(AppDomain),相应地有HttpRuntime包括request、respone、context对象。

应用程序与页面生命周期

图3、ASP.NET请求的内部对象模型

2.2、用触发的MHPM事件处理请求

一旦创建了HttpApplication,它开始处理请求,它经历3个不同的部分HttpModule、Page、HttpHandler。随着它移动到这些部分,将调用不同的事件,开发人员可以扩展和定制同一逻辑。在我们前进之前让我们了解什么是HttpModule和HttpHandlers。他们帮组我们在ASP.NET页处理的前后注入自定义逻辑。他们之间的主要差别是:

  1. 如果你想要注入的逻辑是基于像‘.ASPX’、‘.HTML’这样的文件扩展名,使用HttpHandler。换句话说HttpHandler是基于处理器的扩展。

应用程序与页面生命周期

  1. 如果你想在ASP.NET管道事件中注入逻辑,使用HttpModule。换言之是基于处理器的事件。

应用程序与页面生命周期

你可以点这了解他们之间更多的差异。下面是怎样处理请求的逻辑流。有四个重要的步骤MHPM,解释如下:

Step 1(M   HttpModule):客户端请求处理开始。ASP.NET引擎开始和创建HttpModule发出事件(你可以注入定制逻辑)之前,有6个重要事件你可以使用:BeginRequest、AuthenticateRequest、AuthorizeRequest、ResolveRequestCache、AcquireRequestState和PreRequestHandlerExecute。

Step 2(H   HttpHandler):一旦上面6个事件触发,ASP.NET引擎将调用ProcessRequest事件,即使你已经在项目中执行了HttpHandler。

Step 3(P   ASP.NET page):一旦HttpHandler逻辑执行,ASP.NET page对象被创建。ASP.NET page对象被创建,许多事件被触发,你可以在这些页面事件中写我们自定义的逻辑。有6个重要事件给我们提供占位,在ASP.NET页中写逻辑:Init、Load、Validate、Event、Render、Unload。你可以记住单词SILVER来记这些事件,S-Start(没有任何意义,仅仅是为了形成一个单词),I(Init)、L(Load)、V(Validate)、E(Event)、R(Render)。

Step 4(M   HttpModule):一旦页面对象执行了且从内存中卸载,HttpModule提供发送页面执行事件,它们可用于注入自定义post-处理逻辑。有4个重要的post-处理事件,PostRequestHandlerExecute、PostRequestState、UpdateRequestCache、EndRequest。

下图展示了上面的过程。

应用程序与页面生命周期

3、什么事件中应该做什么

下面的表格展示了什么事件中做什么逻辑或代码。

SectionEventDescription
HttpModuleBeginRequest此事件标志着一个新的请求,他保证在每个请求中都有。
HttpModuleAuthenticateRequest此事件标志ASP.NET运行时准备验证用户。任何身份验证代码都可以在此注入。
HttpModuleAuthorizeRequest此事件标志ASP.NET运行时准备授权用户。任何授权代码都可以在此注入。
HttpModuleResolveRequest在ASP.NET中我们通常使用OutputCache指令做缓存。在这个事件中,ASP.NET运行时确定是否能够从缓存中加载页面,而不是从头开始生成。任何缓存的具体活动可以被注入这里。
HttpModuleAcquireRequestState此事件标志着ASP.NET运行时准备获得会话变量。可以对会话变量做任何你想要的处理。
HttpModulePreRequestHandlerExecute恰好在ASP.NET 开始执行事件处理程序前发生。可以预处理你想做的事。
HttpHandlerProcessRequestHttpHandler逻辑被执行。在这个部分我们将为每个页面扩展名写需要的逻辑。
PageInit此事件发生在ASP.NET页面且可以用来:
1、动态地创建控件,如果你一定要在运行时创建控件;
2、任何初始化设置
3、母版页及其设置
在这部分中我们没有获得viewstate、postedvalues及已经初始化的控件。
PageLoad在这部分ASP.NET控件完全被加载且在这里你可以写UI操作逻辑或任何其他逻辑。
PageValidate如果在页面上你有验证器,你同样想在这里检查。
PageRender是时候将输入发送到浏览器。如果你想对最终的HTML做些修改,你可以在这里输入你的HTML逻辑。
PageUnload页面对象从内存中卸载。
HttpModulePostRequestHandlerExecute可以注入任何你想要的逻辑,在处理程序执行之后。
HttpModuleReleaseRequestState想保存更新某些状态变量,如会话变量。
HttpModuleUpdateRequestCache在结束之前是否更新你的缓存。
HttpModuleEndRequest这是将输出发送到客户端浏览器之前的最后一个阶段。

4、示例代码

点击下载代码,示例代码展示了事件是怎样触发的。代码中我们创建了一个HttpModule和HttpHandler,且我们显示一个简单的响应在所有的事件中。下面是HttpModule类,跟踪所有的事件且添加到全局集合。

 
  1. public class clsHttpModule : IHttpModule  
  2. {  
  3. ......   
  4. void OnUpdateRequestCache(object sender, EventArgs a)  
  5. {  
  6. objArrayList.Add("httpModule:OnUpdateRequestCache");  
  7. }  
  8. void OnReleaseRequestState(object sender, EventArgs a)  
  9. {  
  10. objArrayList.Add("httpModule:OnReleaseRequestState");  
  11. }  
  12. void OnPostRequestHandlerExecute(object sender, EventArgs a)  
  13. {  
  14. objArrayList.Add("httpModule:OnPostRequestHandlerExecute");  
  15. }  
  16. void OnPreRequestHandlerExecute(object sender, EventArgs a)  
  17. {  
  18. objArrayList.Add("httpModule:OnPreRequestHandlerExecute");  
  19. }  
  20. void OnAcquireRequestState(object sender, EventArgs a)  
  21. {  
  22. objArrayList.Add("httpModule:OnAcquireRequestState");  
  23. }  
  24. void OnResolveRequestCache(object sender, EventArgs a)  
  25. {  
  26. objArrayList.Add("httpModule:OnResolveRequestCache");  
  27. }  
  28. void OnAuthorization(object sender, EventArgs a)  
  29. {  
  30. objArrayList.Add("httpModule:OnAuthorization");  
  31. }  
  32. void OnAuthentication(object sender, EventArgs a)  
  33. {  
  34.  
  35. objArrayList.Add("httpModule:AuthenticateRequest");  
  36. }  
  37. void OnBeginrequest(object sender, EventArgs a)  
  38. {  
  39.  
  40. objArrayList.Add("httpModule:BeginRequest");  
  41. }  
  42. void OnEndRequest(object sender, EventArgs a)  
  43. {  
  44. objArrayList.Add("httpModule:EndRequest");  
  45. objArrayList.Add("<hr>");  
  46. foreach (string str in objArrayList)  
  47. {  
  48. httpApp.Context.Response.Write(str + "<br>") ;  
  49. }  
  50. }   
  51. } 

下面是HttpHandler的代码片段,它跟踪ProcessRequest事件。

 
  1. public class clsHttpHandler : IHttpHandler  
  2. {  
  3. public void ProcessRequest(HttpContext context)  
  4. {  
  5. clsHttpModule.objArrayList.Add("HttpHandler:ProcessRequest");  
  6. context.Response.Redirect("Default.aspx");  
  7. }  
  8. } 

我们也追踪ASP.NET页面的所有事件。

 
  1. public partial class _Default : System.Web.UI.Page   
  2. {  
  3. protected void Page_init(object sender, EventArgs e)  
  4. {  
  5.  
  6. clsHttpModule.objArrayList.Add("Page:Init");  
  7. }  
  8. protected void Page_Load(object sender, EventArgs e)  
  9. {  
  10. clsHttpModule.objArrayList.Add("Page:Load");  
  11. }  
  12. public override void Validate()   
  13. {  
  14. clsHttpModule.objArrayList.Add("Page:Validate");  
  15. }  
  16. protected void Button1_Click(object sender, EventArgs e)  
  17. {  
  18. clsHttpModule.objArrayList.Add("Page:Event");  
  19. }  
  20. protected override void Render(HtmlTextWriter output)   
  21. {  
  22. clsHttpModule.objArrayList.Add("Page:Render");  
  23. base.Render(output);  
  24. }  
  25. protected void Page_Unload(object sender, EventArgs e)  
  26. {  
  27. clsHttpModule.objArrayList.Add("Page:UnLoad");  
  28. }} 

下面显示上面讨论的所有事件的执行顺序:

应用程序与页面生命周期

5、深入ASP.NET页面事件

在前面部分我们已经知道ASP.NET页面请求的整体事件流,但是我们没有详细讨论,因此本节我们将深入了解。任何ASP.NET页面有2个部分,一个是显示在浏览器上的页面,它有HTML标记、viewstate形式的隐藏值、HTML inputs上的数据。当页面被发送时,在服务器上这些HTML标记被创建到ASP.NET控件且viewstate和表单数据捆绑在一起。一旦你得到这些服务器控件的后台代码,你可以执行和写你自己的逻辑和呈现返回给浏览器。

应用程序与页面生命周期

现在这些HTML控件在服务器上作为ASP.NET控件,ASP.NET页面发出一些事件,我们可以注入自己的逻辑。根据任务/你要执行的逻辑,我们需要把这些逻辑放入适当的事件中。

注意:大部分开发者直接使用Page_Load方法执行一切,这不是一个好的方法。因此,不是填充控件、设置viewstate、应用主题等一切都发生在页面加载上。因此,如果我们能在适当的事件中放入逻辑,将真正使你的代码干净。

 

SeqEvents控件初始化Viewstate可用表单数据可用什么逻辑可以写在这里?
1InitNoNoNo注意:你可以通过使用ASP.NET请求对象访问表单数据等,但是不是通过服务器控件。
动态地创建控件,如果你一定要在运行时创建;任何初始化设置;母版页及其设置。在这部分中我们没有获得viewstate、postedvalues及已经初始化的控件。
2Load View StateNot guaranteedYesNot guaranteed你可以访问View State及任何同步逻辑,你希望viewstate被推倒后台代码变量可以在这里完成。
3PostBackdataNot guaranteedYesYes捏可以访问表单数据。任何逻辑,你希望表单数据被推倒后台代码变量可以在这里完成。
4LoadYesYesYes在这里你可以放入任何你想操作控件的逻辑,如从数据库填充combox、对grid中的数据排序等。这个事件,我们可以访问所有控件、viewstate、发送的值。
5ValidateYesYesYes如果你的页面有验证器或者你想为你的页面执行验证,那就在这里做吧。
6EventYesYesYes如果这是通过点击按钮或下拉列表的改变的一个回发,相关的事件将被触发。与事件相关的任何逻辑都可以在这里执行。
7Pre-renderYesYesYes如果你想对UI对象做最终的修改,如改变属性结构或属性值,在这些控件保存到ViewState之前。
8Save ViewStateYesYesYes一旦对服务器控件的所有修改完成,可以保存控件数据到View State。
9RenderYesYesYes如果你想添加一些自定义HTML到输出,可以在这里完成。
10UnloadYesYesYes做任何你想做的清理工作。

应用程序与页面生命周期

原文链接:ASP.NET application and page life cycle

翻译连接:http://skynet.blog.51cto.com/1943397/365670

使用C# ASP.NET框架构建Web应用程序 ASP.NET是一种用于构建Web应用程序的开发框架,而C#是一种用于编写.NET应用程序的编程语言。本文将详细介绍ASP.NET框架的核心概念和功能,并提供一些示例来帮助读者更好地理解和应用C# ASP.NET框架。C#是一种用于编写.NET应用程序的编程语言,它与ASP.NET框架紧密结合,可以帮助我们构建强大的Web应用程序。在使用C#编写ASP.NET应用程序时,我们可以使用C#语言的各种特性和功能,如面向对象编程、LINQ查询、异常处理等。通过使用C#语言的各种功能,我们可以实现我们的业务需求。 阅读详情

相关推荐

asp.net IHttpModule实现网站内容过滤

IHttpModule实现网站内容过滤IHttpModule实现网站内容过滤IHttpModule实现网站内容过滤

ASP.NET基础之HttpModule学习

一、关于HttpModule理论知识 1.1、HttpModule概述 HttpModule是实现了IHttpModule接口的程序集。一般来说,我们可以将Asp.Net中的事件分成三个级别,最顶层是 应用程序级事件、其次是页面级事件、最下面是控件级事件,事件的触发分别与应用程序周期、页面周期、控件周期紧密相关。而 Http Module 的作用是与应用程序事件密切相关的。 注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。 1.2..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1129

asp.net通过HttpModule自动在Url地址上添加参数

由于项目中有许多页面需要用到cid参数,所以想通过传值cid来获取数据。

ASP.NET基础 HttpModule

一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理, 也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到 真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP 请求信息作一些额外的

对信仰的忠诚丶 603

思科—OSPF多区域配置实验

实验目的:配置OSPF多区域,使得不同网段的PC互相ping通。 网络拓扑如下: R0的配置 Router>en Router#conf t Router(config)#int g0/1 Router(config-if)#ip add 192.168.1.1 255.255.255.0 Router(config-if)#no shut Router(config-if)#exit Router(config)#int g0/0 Router(config-if)#ip add 192.168.

m0_46237205的博客 1万+

IEC61850客户端连接实战:CMS vs MMS协议抓包对比与性能初探(基于YX-PIS协议栈)

本文深入探讨了IEC61850客户端连接中CMS与MMS协议的抓包对比与性能优化。通过Wireshark抓包分析、协议栈配置实战和性能基准测试,揭示了两种协议在连接建立、数据交互和性能调优方面的关键差异,为智能电网自动化系统的协议选择提供了实用指南。

weixin_29209805的博客 215

Http Module 介绍

Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一幅图中可以看到,在Http请求由IHttpHandler处理之前,它需要通过一系列的Http Modul...

weixin_30344795的博客 282

python批量生成CAD图纸

python批量生成CAD图纸

轩逸云的博客 1万+

2S电池有源均衡方案:基于MP2642与STM32F334的压差控制实战

串联电池组中电芯参数不一致是普遍现象,电压失衡会引发容量衰减与安全隐患。电池均衡技术通过能量转移维持各电芯电压一致,其中电感式有源均衡因效率高、发热小,在备用电源与储能系统中备受青睐。该技术利用电感存储能量,将高电压电芯能量搬运至低电压电芯,配合先进MCU实现精确控制。针对2S备用储能单元,基于MP2642GR-Z功率级与STM32F334R8主控的解决方案,通过硬件限制与软件闭环将压差稳定控制在10mV内,兼顾效率与可靠性,为多串电池均衡模块化设计提供了可复用的参考。

weixin_34353714的博客 461

【S32K】S32K144入门笔记(4) Lin (Lin stack组件) 驱动超声波雷达实例

0. 引言 Lin这块是我一直没弄懂的部分。很多东西一知半解,当时感觉是硬凑了答案出来。 果然过标的时候出了问题,几个小伙伴帮忙一起刷夜也没搞定,好在标还是顺利过了,不然罪过大了。 之前做lin这块一直用的是linStack组件,这部分包含了协议栈部分,需要对lin的协议比较清楚和理解才好配置。 尤其是,图形界面配置完成后会生成一个ldf文件,这个文件很重要,所有的代码都是基于这个文件生成的,但是这个文件我确认没找到什么介绍资料,所以很多配置都是一点一点凑出来的,再实际验证的。 抓住这次写文档的机会,把当时

YoYo的桃子树 1万+

故障排查:OpenClaw 更新后 feishu 插件路径失效的解决方法

OpenClaw 更新后 feishu 插件路径失效的解决方法发现问题→ Gateway 启动失败,报插件路径错误定位原因→ OpenClaw 目录结构变化,→解决问题→ 更新为正确的路径验证修复→ 使用确认一切正常。

刘一说的IT专栏 1305

HttpModule & HttpHandle

ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过http管道(Http PipeLine)将请求发送给ASPNET_WP.exe进程,在ASPNET_WP.exe进程中通过HttpRuntime来处理这个请求,处理

路在何方 5260

Android12 适配 usb 触屏

在 Android 系统中,输入设备 IDC(Input Device Configuration)设备描述文件(.idc)是用于配置和定义输入设备行为和属性的文本文件。 该文件通常在`/system/usr/idc/` 或 `/vendor/usr/idc/`,具体位置因芯片厂商SDK而异。一般情况此类文件是预置到系统,开发者 root 权限才能修改这些文件。输入设备 IDC 设备描述文件在 Android 系统中起到了识别、配置、映射和定制输入设备的作用,使得系统能够准确解析和处理各种输入设备的事件,提

weixin_35723192的博客 1234

.NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)

遇到一篇比较好文章,不敢独享,故译之于君共享。Outline如下: 1、引言 2、两个处理步骤 2.1、创建ASP.NET环境 2.2、用触发的MHPM事件处理请求 3、什么事件中应该做什么 4、示例代码 5、深入ASP.NET页面事件 1、引言 这 篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事件的差异。因此,我们首先将介绍解ASP.NET请求的两个概括...

xiaoshengjinbu的博客 132

机器学习笔记 - 基于深度学习(HomographyNet)的图像单应性估计

论文提出了一个深度卷积神经网络来估计一对图像之间的相对单应性。我们的前馈网络有10层,以两个堆叠的灰度图像作为输入,并产生一个8自由度的单应性,可用于映射从第一个图像到第二个图像的像素。我们为HomographyNet提出了两种卷积神经网络架构一个直接估计实值单应性参数的回归网络,以及一个在量化单应性上产生分布的分类网络。我们使用4点单应性参数化,将一个图像的四个角映射到第二个图像。我们的网络使用扭曲的MS-COCO图像以端到端的方式进行训练。论文的贡献如下。........................

学以致用 知行合一 3083

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【转】 .NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)

前几天逛codeproject时,遇到一篇比较好文章,不敢独享,故译之于君共享。Outline如下: 1、引言 2、两个处理步骤 2.1、创建ASP.NET环境 2.2、用触发的MHPM事件处理请求 3、什么事件中应该做什么 4、示例代码 5、深入ASP.NET页面事件 1、引言 这篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事...

weixin_30748995的博客 132

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ASP.NET页面生命周期

声明:此文转载自http://www.lxzhu.net/blogcn/tags/life-cycle(太初有道)。 在Asp.NET WEB FORM的开发中,页面的生命周期以及生命周期中的主要事件是无法忽略的。页面生命周期的详细解释可以参考MSDN – ASP.NET Page Life Cycle Overview 。这篇文章比较长。下面的内容是我阅读这篇文章之后的摘要。主要都是开发过程中

sdtsfhh的专栏 3288

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

.NET Framework与.NET Framework SDK有什么不同?ASP.NET 页面生命周期?

.NET Framework与.NET Framework SDK有什么不同?很多新手也学了很长时间的.NET,但对于这.NET Framework与.NET Framework SDK到底有什么区别可能还是不太清楚,本人也是借别人的话重新阐述一下,希望可以给新手提供帮助。.NET Framework是微软开发的运行于老版本之上的.NET软件运行平台。只要安装了.NET Framework,则从W

.NET学习 从一点一滴开始 1862
上一篇: Web程序保存状态的方式
下一篇: 序列号生成存储过程
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值