日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET WebForm和Mvc开发的比较

發布時間:2023/12/18 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET WebForm和Mvc开发的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在初步了解MVC后,發現很多人對于MVC和三層架構開發概念上會有很大的混淆,所以把這兩天的學習筆記整理一下,分享給自己的同學們。同時也做一個小Demo,讓沒有接觸過MVC開發的同學,能對MVC有一個簡單的了解。

一,MVC和三層架構的區別

①什么是三層架構?

在學校的時候,和同學或者老師一起討論MVC的時候,別人可能會說,“不就是三層架構嘛!實體層(Model),用來創建對象的實體;業務邏輯層(BLL),用來處理復雜的數據間的關系或者是業務間的關系;數據庫訪問層(DAL),用來用來訪問數據庫的;當然還會有,View(視圖層),用來展示數據;”其實自己雖然知道不是這樣,但是自己也僅僅是了解一點點,也解釋不清楚,所以也就算了。(具體的三層架構之間的操作的關系可以看我以前的博客【ASP.NET開發】.NET三層架構簡單解析)。

它們之間互相操作的關系,基本的示意圖如下:

什么是MVC呢?

MVC其實是軟件架構的一種模式,也就是我們經常說的設計模式。其中主要包括三個模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);

其中這里的模型(Model)和視圖(View )是完全區別于三層架構中的模型(Model)和視圖(View)的。

1)MVC中的模型(Model)指的是數據模型,用于封裝與應用程序的業務邏輯相關的數據,除此之外還可以封裝數據的處理方法(相當于業務邏輯)。這是完全區別于三層架構的模型層(Model)的。

MVC中模型(Model)的特點:

①有對數據直接訪問的權利,如:對數據庫的訪問;

②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關心它會被如何顯示或者如何被操作;

③模型(Model)中數據的變化一般會通過一種刷新機制被“公布”;

④為了實現③中的“機制”用于監視此模型的視圖必須事先在此模型上注冊。從而,視圖可以了解在數據模型上發生的改變。

2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數據,沒有程序上的邏輯。為了實現視圖上數據的刷新,視圖(View)需要訪問它監視的模型(Model),所以應該事先在被它監視的數據那里進行注冊。

3)控制器(Controller),這個概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應用程序的流程。主要處理事件并作出相應?!笆录敝饕?#xff1a;用戶的行為和數據的改變。

以上就是關于三層架構和MVC在概念上的區別。

二,WebForm網站和MVC網站運行機制的區別

①WebForm網站的運行機制

比如說我們現在要訪問一個WebForm站點:www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務器都是做了哪些動作呢?

1)首先瀏覽器會向目的服務器發送請求報文。

配置過IIS的都知道,網站掛載在服務器上,我們是通過訪問虛擬目錄的方式訪問網站的。這時候目的主機的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請求;(當然這也是一個非常復雜的過程,包括請求DNS服務器,找到目的主機IP,根據IP地址訪問目的主機。復雜的網絡過程就不敘述,有興趣的自己找資料學習);

2)服務器端的IIS軟件接收到請求后,把請求交給.NET FramWork進行處理;

3).NET FramWork會創建Default_aspx類的對象,也就是我們所說的頁面對象。(在WebFrom網站創建完,并且編譯后Default.aspx會被編譯成Default_aspx類)

到現在的整個過程都還是Http請求,IIS的內部機制會去實現一個IHttphandler的接口,其中該接口實現一個ProcessRequestfang方法

MSDN是這樣解釋的

該ProcessRequest()方法會去調用對應頁面的Page_Load() 方法

1 protected void Page_Load(object sender, EventArgs e)
2 ? ? ? ? {
3 ? ? ? ? ? ? //處理的業務邏輯或者是訪問數據庫的代碼
4 ? ? ? ? ? ? //要輸出的Html或者其它內容
5 ? ? ? ? }

4)返回給瀏覽器(包括Html,CSS,Js等等)

流程示意圖如下:

什么是MVC呢?

MVC其實是軟件架構的一種模式,也就是我們經常說的設計模式。其中主要包括三個模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);

其中這里的模型(Model)和視圖(View )是完全區別于三層架構中的模型(Model)和視圖(View)的。

1)MVC中的模型(Model)指的是數據模型,用于封裝與應用程序的業務邏輯相關的數據,除此之外還可以封裝數據的處理方法(相當于業務邏輯)。這是完全區別于三層架構的模型層(Model)的。

MVC中模型(Model)的特點:

①有對數據直接訪問的權利,如:對數據庫的訪問;

②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關心它會被如何顯示或者如何被操作;

③模型(Model)中數據的變化一般會通過一種刷新機制被“公布”;

④為了實現③中的“機制”用于監視此模型的視圖必須事先在此模型上注冊。從而,視圖可以了解在數據模型上發生的改變。

2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數據,沒有程序上的邏輯。為了實現視圖上數據的刷新,視圖(View)需要訪問它監視的模型(Model),所以應該事先在被它監視的數據那里進行注冊。

3)控制器(Controller),這個概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應用程序的流程。主要處理事件并作出相應?!笆录敝饕?#xff1a;用戶的行為和數據的改變。

以上就是關于三層架構和MVC在概念上的區別。

二,WebForm網站和MVC網站運行機制的區別

①WebForm網站的運行機制

比如說我們現在要訪問一個WebForm站點:www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務器都是做了哪些動作呢?

1)首先瀏覽器會向目的服務器發送請求報文。

配置過IIS的都知道,網站掛載在服務器上,我們是通過訪問虛擬目錄的方式訪問網站的。這時候目的主機的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請求;(當然這也是一個非常復雜的過程,包括請求DNS服務器,找到目的主機IP,根據IP地址訪問目的主機。復雜的網絡過程就不敘述,有興趣的自己找資料學習);

2)服務器端的IIS軟件接收到請求后,把請求交給.NET FramWork進行處理;

3).NET FramWork會創建Default_aspx類的對象,也就是我們所說的頁面對象。(在WebFrom網站創建完,并且編譯后Default.aspx會被編譯成Default_aspx類)

到現在的整個過程都還是Http請求,IIS的內部機制會去實現一個IHttphandler的接口,其中該接口實現一個ProcessRequestfang方法

MSDN是這樣解釋的

該ProcessRequest()方法會去調用對應頁面的Page_Load() 方法

1 protected void Page_Load(object sender, EventArgs e)
2 ? ? ? ? {
3 ? ? ? ? ? ? //處理的業務邏輯或者是訪問數據庫的代碼
4 ? ? ? ? ? ? //要輸出的Html或者其它內容
5 ? ? ? ? }

4)返回給瀏覽器(包括Html,CSS,Js等等)

流程示意圖如下:

什么是MVC呢?

MVC其實是軟件架構的一種模式,也就是我們經常說的設計模式。其中主要包括三個模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);

其中這里的模型(Model)和視圖(View )是完全區別于三層架構中的模型(Model)和視圖(View)的。

1)MVC中的模型(Model)指的是數據模型,用于封裝與應用程序的業務邏輯相關的數據,除此之外還可以封裝數據的處理方法(相當于業務邏輯)。這是完全區別于三層架構的模型層(Model)的。

MVC中模型(Model)的特點:

①有對數據直接訪問的權利,如:對數據庫的訪問;

②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關心它會被如何顯示或者如何被操作;

③模型(Model)中數據的變化一般會通過一種刷新機制被“公布”;

④為了實現③中的“機制”用于監視此模型的視圖必須事先在此模型上注冊。從而,視圖可以了解在數據模型上發生的改變。

2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數據,沒有程序上的邏輯。為了實現視圖上數據的刷新,視圖(View)需要訪問它監視的模型(Model),所以應該事先在被它監視的數據那里進行注冊。

3)控制器(Controller),這個概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應用程序的流程。主要處理事件并作出相應。“事件”主要包括:用戶的行為和數據的改變。

以上就是關于三層架構和MVC在概念上的區別。

二,WebForm網站和MVC網站運行機制的區別

①WebForm網站的運行機制

比如說我們現在要訪問一個WebForm站點:www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務器都是做了哪些動作呢?

1)首先瀏覽器會向目的服務器發送請求報文。

配置過IIS的都知道,網站掛載在服務器上,我們是通過訪問虛擬目錄的方式訪問網站的。這時候目的主機的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請求;(當然這也是一個非常復雜的過程,包括請求DNS服務器,找到目的主機IP,根據IP地址訪問目的主機。復雜的網絡過程就不敘述,有興趣的自己找資料學習);

2)服務器端的IIS軟件接收到請求后,把請求交給.NET FramWork進行處理;

3).NET FramWork會創建Default_aspx類的對象,也就是我們所說的頁面對象。(在WebFrom網站創建完,并且編譯后Default.aspx會被編譯成Default_aspx類)

到現在的整個過程都還是Http請求,IIS的內部機制會去實現一個IHttphandler的接口,其中該接口實現一個ProcessRequestfang方法

MSDN是這樣解釋的

該ProcessRequest()方法會去調用對應頁面的Page_Load() 方法

1 protected void Page_Load(object sender, EventArgs e)
2 ? ? ? ? {
3 ? ? ? ? ? ? //處理的業務邏輯或者是訪問數據庫的代碼
4 ? ? ? ? ? ? //要輸出的Html或者其它內容
5 ? ? ? ? }

4)返回給瀏覽器(包括Html,CSS,Js等等)

流程示意圖如下:

?

②MVC網站的運行機制

?還比如說我們現在要訪問一個MVC站點:www.google.com.hk/FirstPage/Default(僅僅是示例)。我們的瀏覽器和服務器又做了哪些動作呢?

1)瀏覽器向服務器發送Request請求報文(FirstPage/Default)

2)服務器端的IIS相應Request請求

3).NET FramWork根據路由配置,解析URL,并創建FirstPage類的對象,并調用相應的Default方法

1 public ActionResult Default()
2 ? ? ? ? {
3?
4 ? ? ? ? ? ? ? ? return View();//返回給視圖
5 ? ? ? ? }
4)然后會訪問視圖文件夾下的Default.cshtml,返回給瀏覽器(其中包括html,css,js等等)

流程的示意圖如下:

?

這只是一個比較簡單的運行過程。其實在這過程中發生了很多事情,比如說:執行Global.asax中的Application_Start()方法來完成一些初始化的工作等等,會在以后的文章中繼續解析。

以上就是WebForm網站和MVC網站運行機制的區別。

那么到底使用MVC的優點比WebForm到底有哪些優點呢?

①最重要的就是.NET程序員在開發的時候再也不會使用那些被很多人詬病的微軟封裝的控件了。

②MVC設計模式降低了模型(Model,業務和數據)和視圖的耦合關系。包括我們在開發WebForm網站使用三層架構的思想也是為了降低數據和視圖的耦合等;

③可以復用視圖,也就是說同樣的數據可以使用不同的視圖以不同的圖標展示出來。

?-------------------------------------------------------理論到此結束---------------------------------------------------------------

常用的WebForm開發方式就不舉例了,我下邊主要演示一個基本的MVC程序的創建和運行過程。

要創建MVC程序VS肯定是必不可少的,我的開發環境是VS2013,大家請酌情考慮自己的VS版本。

①首先的打開“文件”→“新建項目”,在左側的項目欄選擇“Visual C#”→“Web”,在右邊就可以看到有“ASP.NET Web窗體應用程序”和“ASP.NET MVC 4 Web應用程序”如下圖:

?

②因為要創建MVC程序就選擇點擊第二個選項然后會看到項目模板,默認的是選擇“Internet應用程序”,如果選擇默認的話,就會默認的創建一個具有基本功能的站點。我們這里選擇“基本”,VS只會創建包含基本框架簡的模板

?

③創建完以后我們會在解決方案下看到代碼的樹狀結構,其中包含Models,Views和Controllers三個文件夾

?

④我們首先創建實體對象Model,在Models文件夾下創建一個Child類,并聲明屬性和初始化


?1 ? ? public class Child
?2 ? ? {
?3 ? ? ? ? //編號
?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文件夾上右鍵,“添加”,會看到有“控制器”的選項,如下圖:

?

點擊"控制器"后會出現一個“添加控制器”窗體,在控制器名稱中”Default1Controller“中”Default1“是默認選中的,我們修改其名稱為”HomeController“,

?

注意:這里的”Default1Controller“中的”*Controller“是必須保留的,主要是因為MVC框架有一個”約定大于配置“的規則

單擊”添加“添加控制器,默認生成的控制器代碼,如下:


?1 ? ? //默認生成的控制器代碼
?2 ? ? public class HomeController : Controller
?3 ? ? {
?4 ? ? ? ? //
?5 ? ? ? ? // GET: /Home/
?6?
?7 ? ? ? ? //包含一個Action方法
?8 ? ? ? ? public ActionResult Index()
?9 ? ? ? ? {
10 ? ? ? ? ? ? //返回給視圖
11 ? ? ? ? ? ? return View();
12 ? ? ? ? }
13?
14 ? ? }

⑥然后我們創建一個集合來初始化在Models中創建的Child類的屬性值


?1 #region 初始化數據集合 +List InitData()
?2 ? ? ? ? /// <summary>
?3 ? ? ? ? /// 初始化數據集合
?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方法(相當于MVC設計模式的Model)
?3 ? ? ? ? /// </summary>
?4 ? ? ? ? /// <returns></returns>
?5?
?6 ? ? ? ? public ActionResult Index()
?7 ? ? ? ? {
?8 ? ? ? ? ? ? //可以處理當前業務(你比如讀取數據庫,判斷等)
?9 ? ? ? ? ? ? StringBuilder strBuilder = new StringBuilder();
10 ? ? ? ? ? ? //創建數據集合,獲取數據
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傳輸數據給同名的Indexcshtml視圖
19 ? ? ? ? ? ? //ViewBag是一個dynamic類型的集合,可以動態添加任意類型的任意名稱和屬性
20 ? ? ? ? ? ? ViewBag.HtmlStrBuilder = strBuilder.ToString();
21 ? ? ? ? ? ? //加載同名視圖Index.cshtml
22 ? ? ? ? ? ? return View();
23 ? ? ? ? }


在其中我們使用ViewBag把數據傳輸給同名的Views文件夾下的同名視圖。

⑦創建視圖接收數據,上面代碼的Index方法上右鍵,會出現”添加視圖“,如下圖

?

?之后會在Views文件夾下,生成一個Home文件夾,Home文件夾下面會有一個Index.cshtml文件(這個就是視圖文件)

?⑧視圖接收數據


?1 <html>
?2 <head>
?3 ? ? <meta name="viewport" content="width=device-width" />
?4 ? ? <title>Index</title>
?5 </head>
?6 <body>
?7 ? ? <div>
?8 ? ? ? ?<!---------相當于把Action方法中保存的內容輸出--------->
?9 ? ? ? ?@Html.Raw( @ViewBag.HtmlStrBuilder)
10 ? ? </div>
11 </body>
12 </html>

/***************WebForm簡述*************/

?WebForm中并不是所有控件都是常用的,初學者的目的是用最短的時間學最有用的內容。工具箱中“標準”中常用的控件如下:Label、Button、LinkButton、ImageButton、HyperLink、DropDownList、ListBox、CheckBox、RadioButton、Literal、FileUpload。很多書上講WebForm的時候講把大量的篇幅放到GridView、DataList、DetailsView、Repeater、ListView等這些數據綁定控件上,其實這些控件大同小異,只要掌握了一個控件另外一個控件很容易掌握,推薦大家學習ListView和Repeater就夠了。 ? ? ? ?

1、WebForm的優點和缺點

在一個空的web項目中添加一web窗體,他的用法和winform差不多。都是拖控件

下面用一個求和的例子演示

1.1先在頁面上拖2個文本框一個按鈕

?

點擊按鈕實現求和代碼

? ? ? ? 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

拖幾個控件,雙擊一下,寫幾行代碼。這種技術我們叫WebForm

優點:簡單——拖下控件設置下屬性,寫個單擊事件就完成了一個功能。為習慣于winform開發的程序員過度到webform傻瓜化的開發方式。

這種技術只適合開發簡單,對什么要求都不高的系統,對安全性、性能、可擴展性等要求不高,或者沒有。

但是只要有一點要求,這種webform開發的方式就不行了

webform并沒有很好的考慮到怎么進行大項目的開發。

webform逐漸用的人少了,更多是用ASP.MVC

webform剛開始學很心動,用后就很心痛。

ASP.NET最佳設計模式:把aspx當做模板引擎,輕量的使用Webform控件。
?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的ASP.NET WebForm和Mvc开发的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。