仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1082|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET教程之在ASP.NET中完成Model-View-Controller...

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。asp.net|model背景:
当使用ASP.NET创立Web使用程序时,基于程序的庞大性,必需把程序支解成分歧的部分以削减代码的反复及削减往后厘革时所引发的修改。

 完成战略:

 为懂得释怎样在ASP.NET中完成(MVC)模子-视图-把持器形式,和申明将软件分别成模子、视图、及把持器脚色的优点,在此以一个示例程序为例举行申明。这个示例程序是一个带有下拉框的单页程序,它的功效是显现数据库中的数据。

当用户鄙人拉框当选择了一个纪录,并单击Submit按钮的时分,程序从数据库中搜刮与选中纪录相干的数据库纪录,并以列表的情势显现出来。上面,将以三种分歧的完成体例举行完成。

  单页形式

  在ASP.NET中有很多办理这个成绩的举措,个中最复杂也是最间接的举措就是把一切的代码都放到一个文件中,并起名为Solution.aspx,完成代码以下:
<%@ImportNamespace="System.Data"%>

<%@ImportNamespace="System.Data.SqlClient"%>

<html>

<head>

<title>start</title>

<scriptlanguage="c#"runat="server">

voidPage_Load(objectsender,System.EventArgse)

{

StringselectCmd="select*fromRecording";

SqlConnectionmyConnection=

newSqlConnection(

"server=(local);database=recordings;Trusted_Connection=yes");

SqlDataAdaptermyCommand=newSqlDataAdapter(selectCmd,

myConnection);

DataSetds=newDataSet();

myCommand.Fill(ds,"Recording");

recordingSelect.DataSource=ds;

recordingSelect.DataTextField="title";

recordingSelect.DataValueField="id";

recordingSelect.DataBind();

}

voidSubmitBtn_Click(Objectsender,EventArgse)

{

StringselectCmd=

String.Format(

"select*fromTrackwhererecordingId={0}orderbyid",

(string)recordingSelect.SelectedItem.Value);

SqlConnectionmyConnection=

newSqlConnection(

"server=(local);database=recordings;Trusted_Connection=yes");

SqlDataAdaptermyCommand=newSqlDataAdapter(selectCmd,

myConnection);

DataSetds=newDataSet();

myCommand.Fill(ds,"Track");

MyDataGrid.DataSource=ds;

MyDataGrid.DataBind();

}

</script>

</head>

<body>

<formid="start"method="post"runat="server">

<h3>Recordings</h3>

SelectaRecording:<br/>

<asp:dropdownlistid="recordingSelect"runat="server"/>

<asp:buttonrunat="server"text="Submit"/>

<p/>

<asp:datagridid="MyDataGrid"runat="server"width="700"

backcolor="#ccccff"bordercolor="black"showfooter="false"

cellpadding="3"cellspacing="0"font-name="Verdana"

font-size="8pt"headerstyle-backcolor="#aaaadd"

enableviewstate="false"/>

</form>

</body>

</html>
 这个完成文件包括了模子、视图、把持器这三种脚色,可是未将它们支解为分歧的文件或类。个中的视图工具用HTML完成,用一个数据绑定控件来显现从数据库前往的DataSet中的数据。模子脚色在Page_Load和SubmitBtn_Click函数中完成。而把持器脚色并没有显式的完成,而是由ASP.NET隐式完成。程序运转时,当用户收回页面的哀求,页面跟着用户的选择更新。
MVC形式描述这类完成体例是一种主动的完成机制,ASP.NET充任了程序实行中的把持器的脚色,但程序员必需将详细的事务处置办法增加到事务的呼应函数中。如在这个例子中,把持器在页面加载之前挪用Page_Load函数并实行个中的代码,当用户点击Submit按钮时由体系挪用SubmitBtn_Click函数并实行。

 这类将代码都包括在一个文件中的完成体例十分的间接,并且当使用程序很小其实不常常修正的时分也能够说是一种好的办法,可是假如上面的一些情形呈现的话你大概会入手下手思索修正这类完成办法:

 使编程的事情并行并削减由此带来的产生毛病的大概性。为了增添事情的并行性,进步效力,你大概想让分歧的人编写视图的代码及模子代码并全力削减这类事情体例所带来的堕落的大概性。比方:当一切的代码都在一个文件中的话,那末一个编程职员大概会在改动DataGrid显现格局的时分偶然中修正数据会见的代码。这类毛病是很难被发明的,直到页面全体被编译的时分才会展现出来。。

 使你的数据会见代码在别的页面中重用。在这类单文件的完成体例中,除拷贝代码,没有别的的办法可以做到代码的重用。拷贝的代码是很难被保护的,由于一旦代码产生了变更,你必需在一切的页面都举行修正。

 为了不下面这些情形的产生,ASP.NET引进了代码分别(Code-behind)机制。

 用代码分别机制举行重构

MicrosoftVisualStudio.NET中的代码分别机制使视图层的代码与模子及把持器的代码可以很简单的分别。每一个ASP.NET页面都有一种机制,可以使其要挪用的办法在一个与其分别的类中完成。这类体例利用起来十分的便利,并且也能够使用VisualStudio.NET中的一些别的特征配合完成开辟事情。好比如当你使用代码分别的机制开辟你的页面的时分,能够使用智能感知(IntelliSensetechnology)显现出一个可用办法的列表便利编程。而智能感知手艺在.aspx页面中是不克不及利用的。

 上面给出的是下面例子使用代码分别机制的完成。

 视图部分:

 视图层的代码如今一个独自的文件中完成。Solution.aspx:
<%@Pagelanguage="c#"Codebehind="Solution.aspx.cs"

AutoEventWireup="false"Inherits="Solution"%>

<html>

<head>

<title>Solution</title>

</head>

<body>

<formid="Solution"method="post"runat="server">

<h3>Recordings</h3>

SelectaRecording:<br/>

<asp:dropdownlistid="recordingSelect"runat="server"/>

<asp:buttonid="submit"runat="server"text="Submit"

enableviewstate="False"/>

<p/>

<asp:datagridid="MyDataGrid"runat="server"width="700"

backcolor="#ccccff"bordercolor="black"showfooter="false"

cellpadding="3"cellspacing="0"font-name="Verdana"font-size="8pt"

headerstyle-backcolor="#aaaadd"enableviewstate="false"/>

</form>

</body>

</html>
年夜部分代码都与后面的办理计划的代码不异。次要的分歧点是第一行:
<%@Pagelanguage="c#"Codebehind="Solution.aspx.cs"

AutoEventWireup="false"Inherits="Solution"%>
 这行告知ASP.NET实行情况,这个页面的详细完成机制在一个独自的类中。由于这个页面是自力的,因而假如数据会见的代码产生变更,这个页面其实不必要做任何修改。一样,一些计划师也能够改动这个页面的代码而不会引发任何数据会见的毛病。
模子及把持器部分:

这个办理计划的第二个部分是被埋没的背景代码:
usingSystem;

usingSystem.Data;

usingSystem.Data.SqlClient;

publicclassSolution:System.Web.UI.Page

{

protectedSystem.Web.UI.WebControls.Buttonsubmit;

protectedSystem.Web.UI.WebControls.DataGridMyDataGrid;

protectedSystem.Web.UI.WebControls.DropDownListrecordingSelect;

privatevoidPage_Load(objectsender,System.EventArgse)

{

if(!IsPostBack)

{

StringselectCmd="select*fromRecording";

SqlConnectionmyConnection=

newSqlConnection(

"server=(local);database=recordings;Trusted_Connection=yes");

SqlDataAdaptermyCommand=newSqlDataAdapter(selectCmd,myConnection);

DataSetds=newDataSet();

myCommand.Fill(ds,"Recording");

recordingSelect.DataSource=ds;

recordingSelect.DataTextField="title";

recordingSelect.DataValueField="id";

recordingSelect.DataBind();

}

}

voidSubmitBtn_Click(Objectsender,EventArgse)

{

StringselectCmd=

String.Format(

"select*fromTrackwhererecordingId={0}orderbyid",

(string)recordingSelect.SelectedItem.Value);

SqlConnectionmyConnection=

newSqlConnection(

"server=(local);database=recordings;Trusted_Connection=yes");

SqlDataAdaptermyCommand=newSqlDataAdapter(selectCmd,myConnection);

DataSetds=newDataSet();

myCommand.Fill(ds,"Track");

MyDataGrid.DataSource=ds;

MyDataGrid.DataBind();

}

#regionWebFormDesignergeneratedcode

overrideprotectedvoidOnInit(EventArgse)

{

//

//CODEGEN:ThiscallisrequiredbytheASP.NETWebFormDesigner.

//

InitializeComponent();

base.OnInit(e);

}

///<summary>

///RequiredmethodforDesignersupport-donotmodify

///thecontentsofthismethodwiththecodeeditor.

///</summary>

privatevoidInitializeComponent()

{

this.submit.Click+=newSystem.EventHandler(this.SubmitBtn_Click);

this.Load+=newSystem.EventHandler(this.Page_Load);

}

#endregion

}
这里将代码从上个完成办法独自的文件挪动到了一个它本人的文件中。并经由过程一些机制把视图和模子把持器这两个部分毗连成一个全体,如这个类中的成员变量与Solution.aspx文件中所用的控件是同名的。别的一个必需显现指出的是把持器怎样将举动与其所对应的事务举行毗连。在这个例子中InitializeComponent函数毗连了两个事务。第一个将Load事务与Page_Load函数毗连,第二个是Click事务,当Submit按钮被点击时挪用SubmitBtn_Click函数。

 代码分别是一种将视图部分与模子及把持器部分相分别的一种优异的机制。但当你想把分别出的背景的代码给别的页面重用时大概仍是不敷的。在手艺上,将页面面前的代码复用是可行的,但跟着你必要共享的页面的增添,把页面与背景代码相毗连是很坚苦的。
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听)
老尸 该用户已被删除
沙发
发表于 2015-1-17 11:59:18 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-20 18:12:32 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
简单生活 该用户已被删除
地板
发表于 2015-1-29 13:55:42 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
乐观 该用户已被删除
5#
发表于 2015-2-6 01:44:50 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
蒙在股里 该用户已被删除
6#
发表于 2015-2-14 20:59:21 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-4 10:30:41 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
再现理想 该用户已被删除
8#
发表于 2015-3-11 18:20:40 | 只看该作者
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
小魔女 该用户已被删除
9#
发表于 2015-3-19 06:59:05 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
第二个灵魂 该用户已被删除
10#
发表于 2015-3-27 12:08:45 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 20:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表