ASP.NET MVC 概述






4.81/5 (14投票s)
ASP.NET MVC 概述
引言
如果您对 MVC 框架没有任何了解,可以在这里获得简要概述:MVC 有用问答。
ASP.NET MVC 是开发 ASP.NET 应用程序的一种方法。在本文中,我们将通过创建一个简单的应用程序来概述 ASP.NET MVC。
ASP.NET MVC 框架是微软的 Web 应用程序开发框架,另一个是传统的 Web Forms 框架。
MVC 或 Model View Controller 是一种设计模式,它解决了关注点分离 (Soc) 的问题,Soc 是将应用程序识别并分离成 UI、逻辑和数据访问等不同部分的过程。
Soc 在 Web 应用程序设计中已被证明非常有用。将视图与应用程序的其他部分分开意味着我们可以轻松地更改视图而不会影响应用程序的其余部分。
同样,如果我们想更改主要的应用程序逻辑,只需更改控制器即可。
ASP.NET MVC 是 MVC 设计模式的实现。该框架支持测试驱动开发 (TDD),这是一种在编写应用程序其余部分之前编写单元测试用例的开发方法。
上面的图表显示了 MVC 框架与 .NET Framework 之间的关系。请注意,Web Forms 和 MVC 都构建在 ASP.NET 框架之上。
在构建 Web 应用程序时,开发人员可以根据应用程序的要求选择 Web Forms 模型或 MVC 模型。
MVC 应用程序的核心由模型、视图和控制器组成。
- 模型:包含数据访问逻辑以及代表应用程序域中对象的类(业务对象)。
- 视图:视图包含 HTML 标记。
- 控制器:包含主要的应用程序流程逻辑。
让我们开始创建一个简单的 MVC 应用程序来理解 MVC 应用程序的基础。我们将从创建一个空白的 ASP.NET MVC 应用程序开始。
创建 Web 应用程序后,我们将添加使其正常工作的功能。
添加控制器
要添加控制器,我们将右键单击“controllers”文件夹,然后选择“Add -> Controller”。我们将在控制器名称对话框中输入名称 NamesController
。
请注意,控制器名称必须以 Controller 后缀结尾。这样做会创建一个带有默认代码的控制器。我们已将操作重命名为如下代码。
//public class ProductsController : Controller
//{
// //
// // GET: /Names/
// public ActionResult Electronics()
// {
// ViewData["Message"] = "Electronics Products Listing";
// return View();
// }
//}
这里 NamesController
是我们的 Controller
名称。它继承自 System.Web.Mvc.Controller
框架类。View
是基控制器类中定义的一个方法。
Controller
只是一个普通的类,其中包含动作方法,动作方法是定义在 Controller
类中的非 static public
方法。
控制器操作会响应请求的 URL(例如 Products
)而调用。
稍后我们将看到 URL 如何映射到控制器类中定义的动作。
控制器操作始终返回一个操作结果,该结果决定返回给浏览器的响应。在上面的代码中,操作返回 viewresult
,它代表一个 ASP.NET 视图。
一些操作结果是:
ViewResult
- 表示视图的 HTMLRedirectResult
- 表示重定向到另一个控制器操作ContentResult
- 表示发送到浏览器的 RAW URLEmptyResult
- 表示操作未返回任何结果
通常,我们调用基控制器类中定义的方法,其返回类型是适当的视图,而不是直接返回操作结果。
要调用上面的操作,只需在浏览器中输入 Names/Index
。
如果要在控制器中添加另一个操作,只需向控制器添加另一个 public
方法即可。我们也可以显式指定视图的名称,如下所示:
return View("index");
上面的代码将返回 index 视图,而不是返回默认视图(在本例中也是 index)。现在我们已经有了控制器,让我们创建第一个视图。
视图:视图负责在浏览器中渲染界面。要在控制器中创建视图,我们右键单击操作并选择“Add View”。
我们将保留“创建新视图”对话框中选中的默认选项。这将创建一个带有两个内容元素的新视图。在第一个内容中,我们放置我们希望出现在标题中的内容,而在第二个内容中,我们放置我们希望出现在 HTML 页面正文中的内容。我们将用以下内容替换第二个内容控件:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2> <%=ViewData["Message"] %></h2>
</asp:Content>
请记住,我们在 Controller
的 Index 操作方法中分配了 ViewData
属性。ViewData 是一个 dictionary
对象,用于在控制器和视图之间传递信息。在这里,我们使用 ViewData 属性在视图中显示消息。
路由
在传统的 Web 应用程序中,URL 与要执行的应用程序代码或请求的资源硬连接。URL 路由将 URL 与应用程序代码解耦。
URL ----------> 路由 ----------> 应用程序逻辑
这种解耦的一个优点是它使 URL 对用户更友好,因为我们可以为 URL 指定更有意义的名称。例如,而不是使用 ListProduct.aspx 这样的内容,我们可以简单地使用 Products
,这对最终用户更有意义。
路由定义了用于访问应用程序的 URL 模式。
我们通常在 global.asax 文件中定义路由,因为它包含应用程序生命周期事件。默认情况下,路由在 RegisterRoutes
方法中定义,该方法从 Application_Start
事件调用。
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Products", action = "Electronics",
id = UrlParameter.Optional }
);
MapRoute
方法中的第二个参数匹配所有满足上述模式的 URL,例如 {Controller}/{Action}/{id},并为匹配的 URL 调用适当的控制器操作方法。