这篇文章向你供应ASP.NET MVC 模子,视图和掌握的高度概览。换句话说,解释一下ASP.NET MVC中的 ‘M’, ‘V’, 和 ‘C’。
看完这篇文章今后,你应当就能够明白ASP.NET MVC的差别部份是怎样配合事情的。而且你也应当能够明白ASP.NET MVC顺序的架构与ASP.NET Web窗体顺序或ASP顺序有怎样的差别。
示例 ASP.NET MVC 应用顺序
用以建立ASP.NET MVC Web顺序的默许的 Visual Studio 模板包括一个极为简朴的示例顺序,能够用来明白ASP.NET MVC Web顺序的差别部份。我们在这个教程里就应用这个简朴顺序吧。
运转Visual Studio 2008, 挑选“文件”,“新建”(见图1),用MVC模板建立ASP.NET MVC顺序。在“新建项目”对话框中,在“项目范例(P)”(Visual Basic 或许C#)中挑选你喜好的编程言语,并在“模板”下挑选 ASP.NET MVC Web Application 。点击“肯定”按钮。
建立完新的 ASP.NET MVC 顺序后, 涌现Create Unit Test Project 对话框(见图2). 这个对话框会在解决方案中为你建立一个零丁的用来测试你的ASP.NET MVC顺序的项目。挑选选项 No, do not create a unit test project 并单击 OK 按钮。
ASP.NET MVC 顺序建立完成。你会在解决方案资源管理器窗口中看到几个文件夹和文件。迥殊是你会看到三个离别名为Models,Views和Controllers的文件夹。望文生义,这三个文件夹包括了完成模子,视图和掌握器的文件。
假如你睁开Controllers文件夹,你会看到一个名为AccountController.cs和一个名为HomeControllers.cs的文件。睁开Views文件夹,会看到三个离别名为Account,Home和Shared的子文件夹。睁开Home文件夹,会看到两个离别名为About.aspx和Index.aspx的文件(见图3)。这些文件组成了包括默许ASP.NET MVC模板的示例顺序。
挑选“调试”,“启动调试”运转示例顺序。或许按F5键也能够。
第一次运转 ASP.NET 顺序时,会涌现图4所示的对话框,提议你启动调试。 点击“肯定”按钮顺序就会运转起来了。
运转ASP.NET MVC 顺序时, Visual Studio 会在浏览器运转你的顺序。示例顺序包括2个页面:Index页和About页。顺序初次启动时,涌现Index页(见图5)。你能够点击顺序右上方的菜单链接导航到About页。
注重浏览器地点栏的URL,当点击About菜单链接时,地点栏中的URL变成 /Home/About。
封闭浏览器窗口回到 Visual Studio,你找不到途径Home/About的文件。这个文件不存在,这怎样可能呢?
一个URL不等于一个页
生成传统的ASP.NEW Web窗体顺序或ASP顺序时,一个URL对应一个网页。假如向服务器一个名为 SomePage.aspx的页面提议要求 ,那末磁盘里最好存在这么一个名为SomePage.aspx的页面。假如 SomePage.aspx 文件不存在,将会取得一个貌寝的 404 – Page Not Found 毛病。
相反,生成 ASP.NET MVC 顺序时,在你输入浏览器地点的URL和你要在顺序里找的文件之间并没有对应关联。在
ASP.NET MVC 顺序中, 一个URL并不对应磁盘上的页而是对应一个掌握器action。
在传统 ASP.NET 或许 ASP 顺序中, 浏览器要求被映照到页面。相反,在 ASP.NET MVC 顺序中, 浏览器要求被映照到掌握器action。 ASP.NET Web 窗体顺序以内容为中间。 相反,ASP.NET MVC 顺序以顺序逻辑为中间。
明白ASP.NET Routing
浏览器要求经由过程一个名为 ASP.NET Routing 的ASP.NET 框架特征来取得掌握器action的映照。 ASP.NET Routing 被 ASP.NET MVC 框架用来对传入掌握器action的要求举行路由。
ASP.NET Routing 用一个路由表来处置惩罚传入的要求。当web顺序第一次运转时这个路由表就会被建立。 它是在 Global.asax 文件中被建立的。默许的 MVC Global.asax 文件如代码1所示。
代码1 – Global.asax
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcApplication1 { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://www.ki4.cn/ public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } }
ASP.NET 顺序初次启动时, Application_Start() 要领会被挪用。 在代码 1中, 此要领挪用 RegisterRoutes() 要领建立默许路由表。
默许路由表只包括一个路由。这个默许的路由将传入的要求分为三段(一个URL段就是两个斜杠间的任何东西)。第一段映照到掌握器名,第二段映照到action名,末了一段映照到一个传到action的名为Id的参数。
比方,斟酌以下URL:
/Product/Details/3
这个 URL 被剖析为类似如许的3个参数:
Controller = Product
Action = Details
Id = 3
Global.asax 文件中定义的默许路由包括一切三个参数的默许值。默许的掌握器是 Home, 默许的 Action 是 Index, 默许的 Id 是空字符串。内心想着这些默许值,思索一下下面的URL是怎样剖析的:
/Employee
这个 URL 被剖析成类似如许的三个参数:
Controller = Employee
Action = Index
Id =
末了,假如你不输入任何URL(比方,http://www.ki4.cn/)就翻开 ASP.NET MVC 顺序的话URL就像如许剖析:
Controller = Home
Action = Index
Id =
这个要求就被路由到HomeController类的 Index() action 中。
明白掌握器
掌握器担任掌握用户与MVC顺序交互的体式格局。掌握器包括了ASP.NET MVC顺序的流掌握逻辑。掌握器决议当用户发送一个浏览器要求时返回什么相应。掌握器就是一个类(比方,一个Visual Basic或许C#类)。样例 ASP.NET MVC 顺序包括一个位于Controllers文件夹中名为 HomeController.cs 的掌握器。 HomeController.cs 文件内容转载在代码 2中。
代码 2 – HomeController.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcApplication1.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Title"] = "Home Page"; ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } public ActionResult About() { ViewData["Title"] = "About Page"; return View(); } } }
注重 HomeController 有两个要领,名为Index() 和About().。这两个要领对应由掌握器暴露的两个action。 URL /Home/Index 挪用 HomeController.Index() 要领而URL/ Home/ About 挪用 HomeController.About() 要领。
掌握器中的任何大众要领都被暴露为掌握器action。对此你要迥殊警惕。这意味着人们只需经由过程接见互联网,在浏览器中输入准确的URL,就能够够挪用掌握器中的任何大众要领。
明白视图
由HomeController暴露的 Index() 和About() 这两个action都返回一个视图。视图包括HTML标记和发送到浏览器的内容。在ASP.NET MVC顺序中视图等同于一个页面。你必须在准确的处所建立视图。HomeController.Index() action 返回一个位于以下途径的视图:
/Views/Home/Index.aspx
HomeController.About() action 返回一个位于以下途径的视图:
/Views/Home/About.aspx
一般,假如你想为掌握器action返回视图,那末你需要在Views文件夹下建立一个与掌握器同名的子文件夹。在此子文件夹内,你得建立一个与掌握器action同名的 .aspx 文件。
代码3 中的文件包括 About.aspx 视图。
代码3 – About.aspx
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> <h2>About</h2> <p> Put content here. </p> </asp:Content>
假如你疏忽代码3的第一行,视图的其余部份包括了规范的HTML。你能够输入任何你想要的HTML来修正视图的内容。
视图和ASP或ASP.NET Web窗体中的页面很类似。视图能够包括HTML内容和剧本。你能够用你喜好的编程言语写剧本(比方,C#或Visual Basic .NET)。运用剧原本显现动态内容,比方数据库数据。
明白模子
我们已议论了掌握器和视图。末了一个话题就是模子了。什么是MVC模子?
MVC 模子包括顺序中的一切逻辑,而这些逻辑并不包括在视图或掌握器中。模子应当包括一切顺序营业逻辑,考证逻辑和数据库接见逻辑。比方,假如你用 Microsoft Entity Framework 来接见数据库,那末你要在Models文件夹中建立 Entity Framework 类 ( .edmx 文件) 。
视图应当仅仅包括生成用户界面的逻辑。掌握器应当仅仅包括返回准确视图的最小逻辑或许将用户重定向到其他action(流掌握)。别的的任何事情都应当包括在模子中。
一般,你应当为“胖”模子和“瘦”掌握器而勤奋。掌握器要领应当只包括几行代码。假如掌握器action变得太“胖”的话,那末就应当斟酌将逻辑挪出到Models文件夹中的一个新类中。
总结
这篇教程供应给你ASP.NET MVC Web顺序差别部份的高度概览。你学到了 ASP.NET Routing 怎样将传入的浏览器要求映照到特定的掌握器action。你学到了掌握器怎样编配,视图怎样返回到浏览器。末了,你学到了模子怎样包括顺序营业,考证和数据库接见逻辑。
以上就是明白模子,视图和掌握器(C#)的内容,更多相关内容请关注ki4网(www.ki4.cn)!