ASP.NET WebForm和Mvc开发的比较
在初步了解MVC后,發(fā)現(xiàn)很多人對(duì)于MVC和三層架構(gòu)開發(fā)概念上會(huì)有很大的混淆,所以把這兩天的學(xué)習(xí)筆記整理一下,分享給自己的同學(xué)們。同時(shí)也做一個(gè)小Demo,讓沒有接觸過MVC開發(fā)的同學(xué),能對(duì)MVC有一個(gè)簡(jiǎn)單的了解。
一,MVC和三層架構(gòu)的區(qū)別
①什么是三層架構(gòu)?
在學(xué)校的時(shí)候,和同學(xué)或者老師一起討論MVC的時(shí)候,別人可能會(huì)說,“不就是三層架構(gòu)嘛!實(shí)體層(Model),用來創(chuàng)建對(duì)象的實(shí)體;業(yè)務(wù)邏輯層(BLL),用來處理復(fù)雜的數(shù)據(jù)間的關(guān)系或者是業(yè)務(wù)間的關(guān)系;數(shù)據(jù)庫訪問層(DAL),用來用來訪問數(shù)據(jù)庫的;當(dāng)然還會(huì)有,View(視圖層),用來展示數(shù)據(jù);”其實(shí)自己雖然知道不是這樣,但是自己也僅僅是了解一點(diǎn)點(diǎn),也解釋不清楚,所以也就算了。(具體的三層架構(gòu)之間的操作的關(guān)系可以看我以前的博客【ASP.NET開發(fā)】.NET三層架構(gòu)簡(jiǎn)單解析)。
它們之間互相操作的關(guān)系,基本的示意圖如下:
什么是MVC呢?
MVC其實(shí)是軟件架構(gòu)的一種模式,也就是我們經(jīng)常說的設(shè)計(jì)模式。其中主要包括三個(gè)模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);
其中這里的模型(Model)和視圖(View )是完全區(qū)別于三層架構(gòu)中的模型(Model)和視圖(View)的。
1)MVC中的模型(Model)指的是數(shù)據(jù)模型,用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù),除此之外還可以封裝數(shù)據(jù)的處理方法(相當(dāng)于業(yè)務(wù)邏輯)。這是完全區(qū)別于三層架構(gòu)的模型層(Model)的。
MVC中模型(Model)的特點(diǎn):
①有對(duì)數(shù)據(jù)直接訪問的權(quán)利,如:對(duì)數(shù)據(jù)庫的訪問;
②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關(guān)心它會(huì)被如何顯示或者如何被操作;
③模型(Model)中數(shù)據(jù)的變化一般會(huì)通過一種刷新機(jī)制被“公布”;
④為了實(shí)現(xiàn)③中的“機(jī)制”用于監(jiān)視此模型的視圖必須事先在此模型上注冊(cè)。從而,視圖可以了解在數(shù)據(jù)模型上發(fā)生的改變。
2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數(shù)據(jù),沒有程序上的邏輯。為了實(shí)現(xiàn)視圖上數(shù)據(jù)的刷新,視圖(View)需要訪問它監(jiān)視的模型(Model),所以應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里進(jìn)行注冊(cè)。
3)控制器(Controller),這個(gè)概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應(yīng)用程序的流程。主要處理事件并作出相應(yīng)。“事件”主要包括:用戶的行為和數(shù)據(jù)的改變。
以上就是關(guān)于三層架構(gòu)和MVC在概念上的區(qū)別。
二,WebForm網(wǎng)站和MVC網(wǎng)站運(yùn)行機(jī)制的區(qū)別
①WebForm網(wǎng)站的運(yùn)行機(jī)制
比如說我們現(xiàn)在要訪問一個(gè)WebForm站點(diǎn):www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務(wù)器都是做了哪些動(dòng)作呢?
1)首先瀏覽器會(huì)向目的服務(wù)器發(fā)送請(qǐng)求報(bào)文。
配置過IIS的都知道,網(wǎng)站掛載在服務(wù)器上,我們是通過訪問虛擬目錄的方式訪問網(wǎng)站的。這時(shí)候目的主機(jī)的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請(qǐng)求;(當(dāng)然這也是一個(gè)非常復(fù)雜的過程,包括請(qǐng)求DNS服務(wù)器,找到目的主機(jī)IP,根據(jù)IP地址訪問目的主機(jī)。復(fù)雜的網(wǎng)絡(luò)過程就不敘述,有興趣的自己找資料學(xué)習(xí));
2)服務(wù)器端的IIS軟件接收到請(qǐng)求后,把請(qǐng)求交給.NET FramWork進(jìn)行處理;
3).NET FramWork會(huì)創(chuàng)建Default_aspx類的對(duì)象,也就是我們所說的頁面對(duì)象。(在WebFrom網(wǎng)站創(chuàng)建完,并且編譯后Default.aspx會(huì)被編譯成Default_aspx類)
到現(xiàn)在的整個(gè)過程都還是Http請(qǐng)求,IIS的內(nèi)部機(jī)制會(huì)去實(shí)現(xiàn)一個(gè)IHttphandler的接口,其中該接口實(shí)現(xiàn)一個(gè)ProcessRequestfang方法
MSDN是這樣解釋的
該P(yáng)rocessRequest()方法會(huì)去調(diào)用對(duì)應(yīng)頁面的Page_Load() 方法
1 protected void Page_Load(object sender, EventArgs e)
2 ? ? ? ? {
3 ? ? ? ? ? ? //處理的業(yè)務(wù)邏輯或者是訪問數(shù)據(jù)庫的代碼
4 ? ? ? ? ? ? //要輸出的Html或者其它內(nèi)容
5 ? ? ? ? }
4)返回給瀏覽器(包括Html,CSS,Js等等)
流程示意圖如下:
什么是MVC呢?
MVC其實(shí)是軟件架構(gòu)的一種模式,也就是我們經(jīng)常說的設(shè)計(jì)模式。其中主要包括三個(gè)模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);
其中這里的模型(Model)和視圖(View )是完全區(qū)別于三層架構(gòu)中的模型(Model)和視圖(View)的。
1)MVC中的模型(Model)指的是數(shù)據(jù)模型,用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù),除此之外還可以封裝數(shù)據(jù)的處理方法(相當(dāng)于業(yè)務(wù)邏輯)。這是完全區(qū)別于三層架構(gòu)的模型層(Model)的。
MVC中模型(Model)的特點(diǎn):
①有對(duì)數(shù)據(jù)直接訪問的權(quán)利,如:對(duì)數(shù)據(jù)庫的訪問;
②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關(guān)心它會(huì)被如何顯示或者如何被操作;
③模型(Model)中數(shù)據(jù)的變化一般會(huì)通過一種刷新機(jī)制被“公布”;
④為了實(shí)現(xiàn)③中的“機(jī)制”用于監(jiān)視此模型的視圖必須事先在此模型上注冊(cè)。從而,視圖可以了解在數(shù)據(jù)模型上發(fā)生的改變。
2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數(shù)據(jù),沒有程序上的邏輯。為了實(shí)現(xiàn)視圖上數(shù)據(jù)的刷新,視圖(View)需要訪問它監(jiān)視的模型(Model),所以應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里進(jìn)行注冊(cè)。
3)控制器(Controller),這個(gè)概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應(yīng)用程序的流程。主要處理事件并作出相應(yīng)。“事件”主要包括:用戶的行為和數(shù)據(jù)的改變。
以上就是關(guān)于三層架構(gòu)和MVC在概念上的區(qū)別。
二,WebForm網(wǎng)站和MVC網(wǎng)站運(yùn)行機(jī)制的區(qū)別
①WebForm網(wǎng)站的運(yùn)行機(jī)制
比如說我們現(xiàn)在要訪問一個(gè)WebForm站點(diǎn):www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務(wù)器都是做了哪些動(dòng)作呢?
1)首先瀏覽器會(huì)向目的服務(wù)器發(fā)送請(qǐng)求報(bào)文。
配置過IIS的都知道,網(wǎng)站掛載在服務(wù)器上,我們是通過訪問虛擬目錄的方式訪問網(wǎng)站的。這時(shí)候目的主機(jī)的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請(qǐng)求;(當(dāng)然這也是一個(gè)非常復(fù)雜的過程,包括請(qǐng)求DNS服務(wù)器,找到目的主機(jī)IP,根據(jù)IP地址訪問目的主機(jī)。復(fù)雜的網(wǎng)絡(luò)過程就不敘述,有興趣的自己找資料學(xué)習(xí));
2)服務(wù)器端的IIS軟件接收到請(qǐng)求后,把請(qǐng)求交給.NET FramWork進(jìn)行處理;
3).NET FramWork會(huì)創(chuàng)建Default_aspx類的對(duì)象,也就是我們所說的頁面對(duì)象。(在WebFrom網(wǎng)站創(chuàng)建完,并且編譯后Default.aspx會(huì)被編譯成Default_aspx類)
到現(xiàn)在的整個(gè)過程都還是Http請(qǐng)求,IIS的內(nèi)部機(jī)制會(huì)去實(shí)現(xiàn)一個(gè)IHttphandler的接口,其中該接口實(shí)現(xiàn)一個(gè)ProcessRequestfang方法
MSDN是這樣解釋的
該P(yáng)rocessRequest()方法會(huì)去調(diào)用對(duì)應(yīng)頁面的Page_Load() 方法
1 protected void Page_Load(object sender, EventArgs e)
2 ? ? ? ? {
3 ? ? ? ? ? ? //處理的業(yè)務(wù)邏輯或者是訪問數(shù)據(jù)庫的代碼
4 ? ? ? ? ? ? //要輸出的Html或者其它內(nèi)容
5 ? ? ? ? }
4)返回給瀏覽器(包括Html,CSS,Js等等)
流程示意圖如下:
什么是MVC呢?
MVC其實(shí)是軟件架構(gòu)的一種模式,也就是我們經(jīng)常說的設(shè)計(jì)模式。其中主要包括三個(gè)模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);
其中這里的模型(Model)和視圖(View )是完全區(qū)別于三層架構(gòu)中的模型(Model)和視圖(View)的。
1)MVC中的模型(Model)指的是數(shù)據(jù)模型,用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù),除此之外還可以封裝數(shù)據(jù)的處理方法(相當(dāng)于業(yè)務(wù)邏輯)。這是完全區(qū)別于三層架構(gòu)的模型層(Model)的。
MVC中模型(Model)的特點(diǎn):
①有對(duì)數(shù)據(jù)直接訪問的權(quán)利,如:對(duì)數(shù)據(jù)庫的訪問;
②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關(guān)心它會(huì)被如何顯示或者如何被操作;
③模型(Model)中數(shù)據(jù)的變化一般會(huì)通過一種刷新機(jī)制被“公布”;
④為了實(shí)現(xiàn)③中的“機(jī)制”用于監(jiān)視此模型的視圖必須事先在此模型上注冊(cè)。從而,視圖可以了解在數(shù)據(jù)模型上發(fā)生的改變。
2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數(shù)據(jù),沒有程序上的邏輯。為了實(shí)現(xiàn)視圖上數(shù)據(jù)的刷新,視圖(View)需要訪問它監(jiān)視的模型(Model),所以應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里進(jìn)行注冊(cè)。
3)控制器(Controller),這個(gè)概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應(yīng)用程序的流程。主要處理事件并作出相應(yīng)。“事件”主要包括:用戶的行為和數(shù)據(jù)的改變。
以上就是關(guān)于三層架構(gòu)和MVC在概念上的區(qū)別。
二,WebForm網(wǎng)站和MVC網(wǎng)站運(yùn)行機(jī)制的區(qū)別
①WebForm網(wǎng)站的運(yùn)行機(jī)制
比如說我們現(xiàn)在要訪問一個(gè)WebForm站點(diǎn):www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務(wù)器都是做了哪些動(dòng)作呢?
1)首先瀏覽器會(huì)向目的服務(wù)器發(fā)送請(qǐng)求報(bào)文。
配置過IIS的都知道,網(wǎng)站掛載在服務(wù)器上,我們是通過訪問虛擬目錄的方式訪問網(wǎng)站的。這時(shí)候目的主機(jī)的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請(qǐng)求;(當(dāng)然這也是一個(gè)非常復(fù)雜的過程,包括請(qǐng)求DNS服務(wù)器,找到目的主機(jī)IP,根據(jù)IP地址訪問目的主機(jī)。復(fù)雜的網(wǎng)絡(luò)過程就不敘述,有興趣的自己找資料學(xué)習(xí));
2)服務(wù)器端的IIS軟件接收到請(qǐng)求后,把請(qǐng)求交給.NET FramWork進(jìn)行處理;
3).NET FramWork會(huì)創(chuàng)建Default_aspx類的對(duì)象,也就是我們所說的頁面對(duì)象。(在WebFrom網(wǎng)站創(chuàng)建完,并且編譯后Default.aspx會(huì)被編譯成Default_aspx類)
到現(xiàn)在的整個(gè)過程都還是Http請(qǐng)求,IIS的內(nèi)部機(jī)制會(huì)去實(shí)現(xiàn)一個(gè)IHttphandler的接口,其中該接口實(shí)現(xiàn)一個(gè)ProcessRequestfang方法
MSDN是這樣解釋的
該P(yáng)rocessRequest()方法會(huì)去調(diào)用對(duì)應(yīng)頁面的Page_Load() 方法
1 protected void Page_Load(object sender, EventArgs e)
2 ? ? ? ? {
3 ? ? ? ? ? ? //處理的業(yè)務(wù)邏輯或者是訪問數(shù)據(jù)庫的代碼
4 ? ? ? ? ? ? //要輸出的Html或者其它內(nèi)容
5 ? ? ? ? }
4)返回給瀏覽器(包括Html,CSS,Js等等)
流程示意圖如下:
?
②MVC網(wǎng)站的運(yùn)行機(jī)制
?還比如說我們現(xiàn)在要訪問一個(gè)MVC站點(diǎn):www.google.com.hk/FirstPage/Default(僅僅是示例)。我們的瀏覽器和服務(wù)器又做了哪些動(dòng)作呢?
1)瀏覽器向服務(wù)器發(fā)送Request請(qǐng)求報(bào)文(FirstPage/Default)
2)服務(wù)器端的IIS相應(yīng)Request請(qǐng)求
3).NET FramWork根據(jù)路由配置,解析URL,并創(chuàng)建FirstPage類的對(duì)象,并調(diào)用相應(yīng)的Default方法
1 public ActionResult Default()
2 ? ? ? ? {
3?
4 ? ? ? ? ? ? ? ? return View();//返回給視圖
5 ? ? ? ? }
4)然后會(huì)訪問視圖文件夾下的Default.cshtml,返回給瀏覽器(其中包括html,css,js等等)
流程的示意圖如下:
?
這只是一個(gè)比較簡(jiǎn)單的運(yùn)行過程。其實(shí)在這過程中發(fā)生了很多事情,比如說:執(zhí)行Global.asax中的Application_Start()方法來完成一些初始化的工作等等,會(huì)在以后的文章中繼續(xù)解析。
以上就是WebForm網(wǎng)站和MVC網(wǎng)站運(yùn)行機(jī)制的區(qū)別。
那么到底使用MVC的優(yōu)點(diǎn)比WebForm到底有哪些優(yōu)點(diǎn)呢?
①最重要的就是.NET程序員在開發(fā)的時(shí)候再也不會(huì)使用那些被很多人詬病的微軟封裝的控件了。
②MVC設(shè)計(jì)模式降低了模型(Model,業(yè)務(wù)和數(shù)據(jù))和視圖的耦合關(guān)系。包括我們?cè)陂_發(fā)WebForm網(wǎng)站使用三層架構(gòu)的思想也是為了降低數(shù)據(jù)和視圖的耦合等;
③可以復(fù)用視圖,也就是說同樣的數(shù)據(jù)可以使用不同的視圖以不同的圖標(biāo)展示出來。
?-------------------------------------------------------理論到此結(jié)束---------------------------------------------------------------
常用的WebForm開發(fā)方式就不舉例了,我下邊主要演示一個(gè)基本的MVC程序的創(chuàng)建和運(yùn)行過程。
要?jiǎng)?chuàng)建MVC程序VS肯定是必不可少的,我的開發(fā)環(huán)境是VS2013,大家請(qǐng)酌情考慮自己的VS版本。
①首先的打開“文件”→“新建項(xiàng)目”,在左側(cè)的項(xiàng)目欄選擇“Visual C#”→“Web”,在右邊就可以看到有“ASP.NET Web窗體應(yīng)用程序”和“ASP.NET MVC 4 Web應(yīng)用程序”如下圖:
?
②因?yàn)橐獎(jiǎng)?chuàng)建MVC程序就選擇點(diǎn)擊第二個(gè)選項(xiàng)然后會(huì)看到項(xiàng)目模板,默認(rèn)的是選擇“Internet應(yīng)用程序”,如果選擇默認(rèn)的話,就會(huì)默認(rèn)的創(chuàng)建一個(gè)具有基本功能的站點(diǎn)。我們這里選擇“基本”,VS只會(huì)創(chuàng)建包含基本框架簡(jiǎn)的模板
?
③創(chuàng)建完以后我們會(huì)在解決方案下看到代碼的樹狀結(jié)構(gòu),其中包含Models,Views和Controllers三個(gè)文件夾
?
④我們首先創(chuàng)建實(shí)體對(duì)象Model,在Models文件夾下創(chuàng)建一個(gè)Child類,并聲明屬性和初始化
?1 ? ? public class Child
?2 ? ? {
?3 ? ? ? ? //編號(hào)
?4 ? ? ? ? private int id;
?5?
?6 ? ? ? ??
?7 ? ? ? ? public int Id
?8 ? ? ? ? {
?9 ? ? ? ? ? ? get { return id; }
10 ? ? ? ? ? ? set { id = value; }
11 ? ? ? ? }
12?
13 ? ? ? ? //姓名
14 ? ? ? ? private string strName;
15?
16 ? ? ? ? public string StrName
17 ? ? ? ? {
18 ? ? ? ? ? ? get { return strName; }
19 ? ? ? ? ? ? set { strName = value; }
20 ? ? ? ? }
21?
22 ? ? }
⑤在Controllers文件夾上右鍵,“添加”,會(huì)看到有“控制器”的選項(xiàng),如下圖:
?
點(diǎn)擊"控制器"后會(huì)出現(xiàn)一個(gè)“添加控制器”窗體,在控制器名稱中”Default1Controller“中”Default1“是默認(rèn)選中的,我們修改其名稱為”HomeController“,
?
注意:這里的”Default1Controller“中的”*Controller“是必須保留的,主要是因?yàn)镸VC框架有一個(gè)”約定大于配置“的規(guī)則
單擊”添加“添加控制器,默認(rèn)生成的控制器代碼,如下:
?1 ? ? //默認(rèn)生成的控制器代碼
?2 ? ? public class HomeController : Controller
?3 ? ? {
?4 ? ? ? ? //
?5 ? ? ? ? // GET: /Home/
?6?
?7 ? ? ? ? //包含一個(gè)Action方法
?8 ? ? ? ? public ActionResult Index()
?9 ? ? ? ? {
10 ? ? ? ? ? ? //返回給視圖
11 ? ? ? ? ? ? return View();
12 ? ? ? ? }
13?
14 ? ? }
⑥然后我們創(chuàng)建一個(gè)集合來初始化在Models中創(chuàng)建的Child類的屬性值
?1 #region 初始化數(shù)據(jù)集合 +List InitData()
?2 ? ? ? ? /// <summary>
?3 ? ? ? ? /// 初始化數(shù)據(jù)集合
?4 ? ? ? ? /// </summary>
?5 ? ? ? ? /// <returns></returns>
?6 ? ? ? ? public List<Models.Child> InitData()
?7 ? ? ? ? {
?8?
?9 ? ? ? ? ? ? List<Models.Child> list = new List<Models.Child>()
10 ? ? ? ? ? ? {
11 ? ? ? ? ? ? ? ? new Child(){Id=1,StrName="你好啊!"},
12 ? ? ? ? ? ? ? ? new Child(){Id=2,StrName="不好啊!"}
13 ? ? ? ? ? ? };
14?
15 ? ? ? ? ? ? return list;
16 ? ? ? ? }
17?
18 ? ? ? ? #endregion
然后開始編寫Action方法,即”ActionResult Index()“方法,
?1 /// <summary>
?2 ? ? ? ? /// Action方法(相當(dāng)于MVC設(shè)計(jì)模式的Model)
?3 ? ? ? ? /// </summary>
?4 ? ? ? ? /// <returns></returns>
?5?
?6 ? ? ? ? public ActionResult Index()
?7 ? ? ? ? {
?8 ? ? ? ? ? ? //可以處理當(dāng)前業(yè)務(wù)(你比如讀取數(shù)據(jù)庫,判斷等)
?9 ? ? ? ? ? ? StringBuilder strBuilder = new StringBuilder();
10 ? ? ? ? ? ? //創(chuàng)建數(shù)據(jù)集合,獲取數(shù)據(jù)
11 ? ? ? ? ? ? List<Models.Child> list = InitData();
12 ? ? ? ? ? ? //遍歷集合獲取生成的Html代碼
13 ? ? ? ? ? ? list.ForEach(d =>
14 ? ? ? ? ? ? {
15 ? ? ? ? ? ? ? ? strBuilder.AppendLine("<div>" + d.Id.ToString() + "</div>");
16 ? ? ? ? ? ? });
17?
18 ? ? ? ? ? ? //使用ViewBag傳輸數(shù)據(jù)給同名的Indexcshtml視圖
19 ? ? ? ? ? ? //ViewBag是一個(gè)dynamic類型的集合,可以動(dòng)態(tài)添加任意類型的任意名稱和屬性
20 ? ? ? ? ? ? ViewBag.HtmlStrBuilder = strBuilder.ToString();
21 ? ? ? ? ? ? //加載同名視圖Index.cshtml
22 ? ? ? ? ? ? return View();
23 ? ? ? ? }
在其中我們使用ViewBag把數(shù)據(jù)傳輸給同名的Views文件夾下的同名視圖。
⑦創(chuàng)建視圖接收數(shù)據(jù),上面代碼的Index方法上右鍵,會(huì)出現(xiàn)”添加視圖“,如下圖
?
?之后會(huì)在Views文件夾下,生成一個(gè)Home文件夾,Home文件夾下面會(huì)有一個(gè)Index.cshtml文件(這個(gè)就是視圖文件)
?⑧視圖接收數(shù)據(jù)
?1 <html>
?2 <head>
?3 ? ? <meta name="viewport" content="width=device-width" />
?4 ? ? <title>Index</title>
?5 </head>
?6 <body>
?7 ? ? <div>
?8 ? ? ? ?<!---------相當(dāng)于把Action方法中保存的內(nèi)容輸出--------->
?9 ? ? ? ?@Html.Raw( @ViewBag.HtmlStrBuilder)
10 ? ? </div>
11 </body>
12 </html>
/***************WebForm簡(jiǎn)述*************/
?WebForm中并不是所有控件都是常用的,初學(xué)者的目的是用最短的時(shí)間學(xué)最有用的內(nèi)容。工具箱中“標(biāo)準(zhǔn)”中常用的控件如下:Label、Button、LinkButton、ImageButton、HyperLink、DropDownList、ListBox、CheckBox、RadioButton、Literal、FileUpload。很多書上講WebForm的時(shí)候講把大量的篇幅放到GridView、DataList、DetailsView、Repeater、ListView等這些數(shù)據(jù)綁定控件上,其實(shí)這些控件大同小異,只要掌握了一個(gè)控件另外一個(gè)控件很容易掌握,推薦大家學(xué)習(xí)ListView和Repeater就夠了。 ? ? ? ?
1、WebForm的優(yōu)點(diǎn)和缺點(diǎn)
在一個(gè)空的web項(xiàng)目中添加一web窗體,他的用法和winform差不多。都是拖控件
下面用一個(gè)求和的例子演示
1.1先在頁面上拖2個(gè)文本框一個(gè)按鈕
?
點(diǎn)擊按鈕實(shí)現(xiàn)求和代碼
? ? ? ? protected void Button1_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? int i = Convert.ToInt32(TextBox1.Text);//就像winform一樣直接獲取控件的的值
? ? ? ? ? ? int j = Convert.ToInt32(TextBox2.Text);
? ? ? ? ? ? Label1.Text = Convert.ToString(i + j);
? ? ? ? }
通過上面的例子我們知道什么是webform
拖幾個(gè)控件,雙擊一下,寫幾行代碼。這種技術(shù)我們叫WebForm
優(yōu)點(diǎn):簡(jiǎn)單——拖下控件設(shè)置下屬性,寫個(gè)單擊事件就完成了一個(gè)功能。為習(xí)慣于winform開發(fā)的程序員過度到webform傻瓜化的開發(fā)方式。
這種技術(shù)只適合開發(fā)簡(jiǎn)單,對(duì)什么要求都不高的系統(tǒng),對(duì)安全性、性能、可擴(kuò)展性等要求不高,或者沒有。
但是只要有一點(diǎn)要求,這種webform開發(fā)的方式就不行了
webform并沒有很好的考慮到怎么進(jìn)行大項(xiàng)目的開發(fā)。
webform逐漸用的人少了,更多是用ASP.MVC
webform剛開始學(xué)很心動(dòng),用后就很心痛。
ASP.NET最佳設(shè)計(jì)模式:把a(bǔ)spx當(dāng)做模板引擎,輕量的使用Webform控件。
?
總結(jié)
以上是生活随笔為你收集整理的ASP.NET WebForm和Mvc开发的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VUE:组件间相互跳转、页面带参跳转
- 下一篇: Web 绘图—服务器端绘图