活着的死人 发表于 2015-1-16 23:37:24

ASP编程:在 ASP.NET 中完成 Page Controller

帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。asp.net您要在ASP.NET中构建Web使用程序,您但愿经由过程利用内置的PageController(页面把持器)来使用ASP.NET的事务驱动特征。

完成战略

默许情形下,PageController形式中所形貌的观点是在ASP.NET中完成的。ASP.NET页面框架完成这些观点所接纳的体例使得在客户端上捕捉事务、将其传输到服务器并挪用得当办法这一系列操纵的基础机制是主动举行的,而且对完成者来讲是不成见的。页面把持器是可扩大的,由于它会在性命周期的特定点上公然各类事务(请参阅此形式前面的"页面熟命周期"),因而,与使用程序详细相干的操纵能够在得当的时分运转。

比方,假定用户正在与包括一个按钮服务器控件的Web窗体页举行交互(请参阅此形式前面的"复杂页面示例")。当用户单击按钮控件时,一个事务将作为HTTP送达内容传送到服务器,在那边,ASP.NET页面框架会注释送达的信息,并将激发的事务与得当的事务处置程序相干联。框架主动挪用该按钮的得当事务处置程序,作为框架的一般处置的一部分。因而,您不再必要完成此功效。别的,您还可使用内置把持器,大概,您能够用本人自界说的把持器来取代内置把持器(请参阅FrontController)。

页面熟命周期

上面按产生按次列出了页面熟命周期中最多见的各个阶段。个中还包含激发的特定事务,和处置哀求时在各个阶段大概实行的一些典范操纵:

ASP.NET页面框架初始化(事务:Init)。这是性命周期的第一个步骤,该步骤将初始化ASP.NET运转库以便为呼应哀求做好筹办。

用户代码初始化(事务:Load)。您应当实行与使用程序详细相干的罕见义务,比方,当页面把持器激发Load事务时翻开数据库毗连。您能够假定:激发Load事务后,服务器控件已创立并完成初始化、形态已复原而且窗体控件反应了客户真个变动。

与使用程序相干的事务处置。在此阶段,您应当实行与使用程序相干的处置,以呼应把持器激发的事务。.

清算(事务:Unload)。该页面已完成天生,如今能够抛弃。您应当封闭Load事务翻开的任何数据库毗连,抛弃任何不再必要的工具。在毗连工具被作为渣滓接纳后,Microsoft?.NETFramework将主动封闭数据库毗连。不外,您对什么时候举行渣滓接纳没有任何把持权。因而,显式封闭数据库毗连以充实使用数据库毗连池是一个很好的做法。

注重:另有几个页面处置阶段没有在这里列出。不外,这些阶段不必于年夜多半页面处置情形。

复杂页面示例

第一个示例是一个复杂页面,它承受来自用户的输出,然后在屏幕上显现该输出。该示例申明了ASP.NET用于完成服务器控件的事务驱动模子。



:复杂页面


当用户键进他或她的名字、然后单击"ClickHere"按钮后,键进的名字将间接呈现在按钮上面,如所示。



:显现用户输出的复杂页面


在ASP.NET网页中,用户界面编程分为两个分歧的部分:可视组件(或视图)和分离了模子和把持器的逻辑。这类分别将页面的可视部分(视图)同与页面交互的、页面前面的代码(模子和把持器)分别开来。

可视元素称为Web窗体页。该页面由包括静态HTML服务器控件或ASP.NET服务器控件(或同时包括这两种控件)的文件组成。在此示例中,Web窗体页名为SimplePage.aspx,它由以下代码构成:




<%@Pagelanguage="c#"Codebehind="SimplePage.aspx.cs"AutoEventWireup="false"Inherits="SimplePage"%>
<HTML>
<body>
<formid="Form1"runat="server">
Name:<asp:textboxid="name"runat="server"/>
<p/>
<asp:buttonid="MyButton"text="ClickHere"OnClick="SubmitBtn_Click"runat="server"/>
<p/>
<spanid="mySpan"runat="server"></span>
</form>
</body>
</HTML>

Web窗体页的逻辑由为了与窗体举行交互而创立的代码组成。编程逻辑放在一个与用户界面文件分别的文件中。此文件被称为"代码埋没"文件,文件名是SimplePage.aspx.cs:



usingSystem;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;

publicclassSimplePage:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.TextBoxname;
protectedSystem.Web.UI.WebControls.ButtonMyButton;
protectedSystem.Web.UI.HtmlControls.HtmlGenericControlmySpan;

publicvoidSubmitBtn_Click(Objectsender,EventArgse)
{
mySpan.InnerHtml="Hello,"+name.Text+".";
}
}

此代码的用处是关照页面把持器:当用户单击按钮后,将向服务器发送一个哀求,并实行SubmitBtn_Click函数。


此完成显现了毗连到把持器所供应的事务是何等复杂。它还申明,用这类体例编写的代码更容易于了解,由于使用程序逻辑没有与办理事务调剂的初级代码分离起来。


公用表面示例

上面的示例利用页面把持器的典范完成战略来供应显现静态内容的横幅,该横幅在使用程序的每页上显现已考证的用户的电子邮件地点(该地点是从数据库检索的)。

站点内的一切页面临象所承继的基类中包括了公用完成。显现了站点中的一个网页。




:显现静态内容的横幅


站点中的各个页面卖力出现本人的内容,而基类则卖力出现头信息。由于各个页面是从基类承继的,以是它们都具有不异的功效。


此完成利用了称为TemplateMethod的计划形式。该形式在一个操纵中界说了一个算法的框架,而将一些步骤交给子类完成。TemplateMethod同意子类从头界说算法的某些步骤,而不用变动该算法的布局。

将TemplateMethod使用于此成绩必要将公用代码从各个页面移到一个基类中。如许能够确保公用代码放在一个中央,而且很简单保护。在此示例中,基类名为BasePage并卖力将Page_Load办法毗连到Load事务。与BasePage相干的事情(即从数据库检索用户的电子邮件地点和设置站点名)完成后,Page_Load函数将挪用名为PageLoadEvent的办法。子类完成PageLoadEvent,以实行它们本人的特定Load功效。显现了此办理计划的布局。



:代码埋没页面完成的布局


哀求网页时,ASP.NET运转库会触发Load事务,该事务再挪用BasePage的Page_Load办法。BasePage办法检索所需数据,然后对所哀求的特定页面挪用PageLoadEvent,以实行任何与页面相干的所需加载。显现了页面哀求序列。



:页面哀求序列


经由过程以这类体例完成公勤奋能,页面不用设置头信息,而且还能够很简单地举行全部站点的变动。假如头信息出现和初始化代码不包括在一个文件中,则必需对包括与头信息有关的代码的一切文件举行变动。

BasePage.cs

基类代码完成了以下功效:

将Load事务毗连到Page_Load办法,以便举行与哀求详细相干的初始化。
从哀求高低文检索已考证的用户的名字,并利用DatabaseGateway类在数据库中查找该用户的纪录。该代码将eMail标签分派给用户的电子邮件地点。
将站点名分派给siteName标签。
挪用PageLoadEvent办法,能够由派生类完成该办法以举行任何与页面相干的加载。
注重:最好将BasePage类界说为笼统类,由于如许能够强迫完成者供应PageLoadEvent的完成。不外,在MicrosoftVisualStudio

飘飘悠悠 发表于 2015-1-20 10:44:53

Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write

只想知道 发表于 2015-1-24 14:18:31

那么,ASP.Net有哪些改进呢?

柔情似水 发表于 2015-1-26 15:07:33

我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。

山那边是海 发表于 2015-2-4 15:09:52

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

飘灵儿 发表于 2015-2-10 02:26:40

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

精灵巫婆 发表于 2015-2-28 15:37:51

多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。

分手快乐 发表于 2015-3-10 00:43:21

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

愤怒的大鸟 发表于 2015-3-17 03:17:23

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")

乐观 发表于 2015-3-23 18:01:57

封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
页: [1]
查看完整版本: ASP编程:在 ASP.NET 中完成 Page Controller