Java进击C#——应用开发之Asp.net MVC
| 本章簡言 |
上一章筆者講到關于Asp.NET的知識點。了解Asp.NET基本的知識點之后,我們在來學習關于C#的MVC框架就簡單多了。顯然本章就是來介紹一下關于Asp.NET MVC。對于MVC的思想筆者相信大家已經很清楚了。筆者在這里就不多說了。我有個同學做Asp.NET開發的。他跟我講過一句話——我都快忘了HTML了。上一章中我們知道做Asp.NET。用純HTML那么筆者覺得你一定會被人認為是SB。對于喜歡純手工來寫界面設計的人來講,Asp.NET MVC 決對不會讓你失望。而本文筆者可能還會用到一些struts2框架的知識來比較一下。不多說了。進入本章的內容吧。
| Global.asax文件 |
在講Asp.NET MVC之前我們來看一下一個文件。就是Global.asax文件。那為什么要講這個文件呢?而這個文件又有什么作用呢?Global.asax文件全名為全局應用程序類。他跟Asp.NET MVC并沒有直接的關系。Asp.NET常常也會用到。想要創建他也很簡單。選中項目右擊》添加》新建項。
點擊添加按扭:
雙擊Global.asax:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState;namespace WebExample {public class Global : System.Web.HttpApplication{protected void Application_Start(object sender, EventArgs e){}protected void Session_Start(object sender, EventArgs e){}protected void Application_BeginRequest(object sender, EventArgs e){}protected void Application_AuthenticateRequest(object sender, EventArgs e){}protected void Application_Error(object sender, EventArgs e){}protected void Session_End(object sender, EventArgs e){}protected void Application_End(object sender, EventArgs e){}} }看了上面的代碼。筆者相信光從名字就可能看出一二。什么意思呢?在應用開始執行的時候會去調用Application_Start方法并且只執行一次。而每次一請求的時候會去調用Application_BeginRequest方法。當用應關團的時候,會去調用Application_End。如果做B/S開發不知道Session的話,那么筆者也無能為力了。所以對于Session_Start方法調用,筆者就不多說了。?是不是覺得JAVA跟的Web.xml的監聽事件有一點像呢。
| Asp.NET MVC |
筆者在學習Asp.NET MVC的時候。visual studio的Asp.NET MVC例子為筆者做了很大的貢獻。讓我們看一下visual studio的列子來了解一下Asp.NET MVC吧。什么樣子創建項目。不用筆者在講了。直接看一下新建項目的對話框吧。
確定之后。會彈出下列對話框。
?
我們可以看到上面的多個選項。
空:表示建立一個什么都沒有的Asp.NET MVC。
基本:表示建立一個最基本可以開發的Asp.NET MVC。
其他的:是面向不同業務的例子。
筆者選擇其中為Internet 應用來了解關于Asp.NET MVC的知識。下面就是新建的項目結構。
App_Data文件夾:用于存放數據文件。如SQL server的MDF文件之類似。
App_Start文件夾:這個文件夾存放了一些Asp.NET MVC開始要執行的配置類。
Content文件夾:存放一些關于主題的文件。如CSS文件。
Controllers文件夾:存放控制器。即是MVC中的C
Filters文件夾:看名字就知道存放過濾器了。
Images文件夾:不用看了。就存放圖片。
Models文件夾:用于存放模型對象。
Scripts文件夾:用于存放JS文件。
Views文件夾:用于存放視圖。
有了上面創建的列子。這對筆者相當好的一件事情。光看上面的項目結構筆者至少知道一件事情。MVC中的V就在對應的Views文件夾里面,而C就在Controllers文件夾里面。這對我們來講很重要。接下來就是要明白M-V-C之間是什么樣子工作。我們就可以學習到Asp.NET MVC。Struts2在啟動的時候會去加載對應的配置文件。當然對于Asp.NET MVC來講,也有對應的這項工作。只是加載的東西不同而以。如下。
Global.asax:
public class MvcApplication : System.Web.HttpApplication{protected void Application_Start(){AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);AuthConfig.RegisterAuth();}}上面的代碼是在Global.asax文件里面的。那么筆者為什么要哪出來講呢?這就是開始初始化Asp.NET MVC的地方。上面的總做了幾件事情呢?
1.注冊WebApi。對于WebApi是什么。不知道大家有沒有用過RESTful 框架。可惜只是了解而以。
2.注冊過濾器。對JAVA開發人員來講,不知道過濾器。那就有一點過份了。
3.注冊路由器。這個很重要。Struts2是什么樣子通過請求的URL來找到對應的Action類。沒有錯。一定是通過struts.xml配置文件的action節點。路由器就是相當于action節點的功能了。
4.注冊Bundle信息。關于Bundle是什么筆者也不好說。只知道他是用于UI界面引入CSS和JS。這個時候可以把多個CSS和JS綁成一起。只要引一個Bundle的URL就是把這個些CSS和JS一起引入。
5.注冊證書。關于這個的話。請讀者們自行查看。反正筆者沒有用到過。所以不敢說。
從上面我們知道一件事情——請求的URL是通過路由器來分析找到對應的控制器。所以學習Asp.NET MVC就必須了解一下路由器是什么樣子工作的。讓我們到App_Start文件夾里面去找一個叫RouteConfig的類。如下
1 public class RouteConfig2 {3 public static void RegisterRoutes(RouteCollection routes)4 {5 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");6 7 routes.MapRoute(8 name: "Default",9 url: "{controller}/{action}/{id}", 10 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 11 ); 12 } 13 }上面便是配置路由器的地方。我們可以看到路由器事實是一種以設置URL模板來處理對應的URL請求。上面是每一個Asp.NET MVC都會提供的默認的URL模板。
name:當前路由器的名稱。
url:URL模板。
defaults:URL請求的默認值。
這里跟Struts2的作法是不一樣子。Struts2在處理URL請求是通對的package節點的名字和action節點的名字來確定對應的action類,再通過action節點配置信息來執行對應的方法。而Asp.NET MVC是通過路由器來分析,并找出對應的控制器和控制器里面的方法。什么樣子講呢?讓我看一下上面url的值。
"{controller}/{action}/{id}"上面就是URL模板。假設用戶請求http://xxx.xx.com.cn/aomi/index/7。通過上面的模板對應一下。我們就可以知道controller值為aomi,action值為index,id值為7。這里id是一個可選的傳值。什么說呢?看到id = UrlParameter.Optional了嗎?就是跟我們講id是可選的。所以嚴格來講action節點的功能跟Asp.NET MVC的控制器是對應的。都是用于控制業務結束之后要顯示的視圖。并差別是控制器是一個類。讓我們看一下控制器的代碼吧。這樣子可以加強理解。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace MvcExample.Controllers {public class HomeController : Controller{public ActionResult Index(){ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";return View();}public ActionResult About(){ViewBag.Message = "Your app description page.";return View();}public ActionResult Contact(){ViewBag.Message = "Your contact page.";return View();}} }我們可以知道HomeController類繼承了Controller類。是不是說繼承Controller類就可以了。顯然不是,筆者試著把HomeController后面的Controller去掉,發現根本找不到控制器。說明了Asp.NET MVC還是有一個約定——控制器要按XxxController來命名。難道就不可以讓開發人員自己來定義名字嗎?筆者沒有說不行。只是有一點煩麻。他要用到控制器工廠。即是IControllerFactory。所以筆者還是希望大家能老實一點吧。struts2在業務結束之后。會返回一個字符串結果來確定要去呈顯的視圖。struts2的視圖卻有幾種。同樣子Asp.NET MVC他也有若干個返回結果。
EmptyResult:返回一個空的結果。即是返回值為void。
ContentResult:返回一個文本內容的結果。
JsonResult:返回一個JSON格式的結果。
ViewResult:返回一個視圖的結果。即是類似于HTML文件。
上面筆者并沒有全部列出來。其他的話,筆者希望讀者們自己去查看。好了。讓我們看一下上面代碼部分中有一個View()的方法。這個返回的是一個ViewResult型類。上面只是調用View()。這個時候他會用方法名來確定對應的視圖。比如index方法被調用。那么View()就會到Views文件夾下的Home文件夾去找Index.cshtml。那么為什么是Home文件夾呢?默認就是如果XxxController的話,就是View/Xxx下面找對應的視圖。那么對于cshtml文件是什么呢?你可以理解為跟ftl文件是一個類型的。同時在Views文件玩夾下有一個叫Shared文件夾。如下。
本來每一個控制器在Views文件夾都會有一個對應的文件夾。文件夾名跟控制器的名字一樣子。那么有沒有共用的呢?沒有錯。Shared文件夾就是用于所有控制器供用的。現在只有一個問題了——使用其他的視圖。看一下下面的圖片。
如果我們調用Index方法。按道理我們要去調用Index.cshtml。那么如果要調用Aomi.cshtml什么辦。如下就可以了。
public class Home:Controller{public ActionResult Index(){return View("Aomi");}}我們都知道了控制器是如何去找視圖之后。我們要去了解一下View到Controller的傳值和Controller到View的傳值。
一、View到Controller的傳值。一般有倆種。一種是用模型對象來傳。一種是KEY-VALUE來傳值。但是一定要確保表單元素的Name要跟參數命名對應。即是相同。
二、Controller到View的傳值。一般有三種。用ViewBag傳值。用Model傳值。即是模型對象。還有用ViewData。
筆者增加了一個方法Aomi。然后參數為name。并通過動態類型ViewBag傳到視圖上。并顯示出來。
控制器:
public class Home:Controller{public ActionResult Index(){return View("Aomi");}public ActionResult Aomi(string name){ViewBag.Name = name;return View("Aomi");}}視圖:
@{ViewBag.Title = "Aomi"; }<h2>@ViewBag.Name</h2>執行結果:
注意:name一定要跟參數的命名相同。不然傳不了。
筆者簡單的講解了一下關于傳值的問題。現在我們要來看一下視圖上所用的知識。Asp.NET MVC的視圖一般都是用razor引擎。所以學習razor語法很重要。網絡上關于razor語法很多。筆者就不多說。筆者簡單的講一個例子。
public class HomeController : Controller{public ActionResult Index(){return View("Aomi");}public ActionResult Aomi(string name){ViewBag.Name = name;return View("Aomi");}public ActionResult Show(){ViewBag.DataList = new List<string>() { "a", "b", "c" };return View();}}Show.cshtml:
@{ViewBag.Title = "Show"; }@foreach (string val in ViewBag.DataList) {<b>@val</b> }執行結果:
其實學習Asp.NET MVC并不難。只要掌握以幾點,筆者相信企業開發就沒有什么大問題。
1.了解一下路由器的用法。
2.View和Controller之間是如何傳值的。
3.Controller是如何確定View的。
4.最后就是學習razor語法。
| 本章總結 |
本章主要是了解一下Asp.NET MVC。講解路由器和視圖與控制之間傳值。可以說這是重點。那么本系列就到這里了。本系列的目地不是為了教學。而是一個引導。是筆者當年學習C#時候的一個過程。最后謝謝大家。
轉載于:https://www.cnblogs.com/luozhijun/p/6886246.html
總結
以上是生活随笔為你收集整理的Java进击C#——应用开发之Asp.net MVC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简朴的生活、高贵的灵魂是人生的至高境界。
- 下一篇: web端 复合控件 响应回发