如最初的介绍性章节所示,View是应用程序用户界面所涉及的组件.这些视图通常是从模型数据绑定并具有扩展名,如html,aspx,cshtml,vbhtml等.在我们的第一个MVC应用程序中,我们使用带控制器的视图向最终用户显示数据.为了将这些静态和动态内容呈现给浏览器,MVC Framework使用View Engines. View Engines基本上是标记语法实现,负责将最终HTML呈现给浏览器.
MVC Framework附带两个内置视图引擎 :
Razor Engine : Razor是一种标记语法,可以将服务器端C#或VB代码转换为网页.此服务器端代码可用于在加载网页时创建动态内容.与ASPX引擎相比,Razor是一种先进的引擎,并且是在MVC的更高版本中推出的.
ASPX引擎 : ASPX或Web窗体引擎是从一开始就包含在MVC框架中的默认视图引擎.使用此引擎编写代码类似于在ASP.NET Web窗体中编写代码.
以下是比较Razor和ASPX引擎的小代码片段.
Razor
@Html.ActionLink("Create New", "UserAdd")
ASPX
<% Html.ActionLink("SignUp", "SignUp") %>
Razor是一款先进的View Engine,它具有紧凑的语法,测试驱动的开发方法和更好的安全功能.我们将在所有示例中使用Razor引擎,因为它是最主要使用的View引擎.
这些视图引擎可以编码并实现以下两种类型 :
强类型
动态类型
这些方法分别类似于早期绑定和后期绑定,其中模型将强烈或动态地绑定到View.
强类型视图
要理解这个概念,让我们创建一个示例MVC应用程序(按照前面章节中的步骤)并添加一个名为 ViewDemoController 的Controller类文件.
现在,在控制器文件中复制以下代码 :
using System.Collections.Generic; using System.Web.Mvc; namespace ViewsInMVC.Controllers { public class ViewDemoController : Controller { public class Blog { public string Name; public string URL; } private readonly List topBlogs = new List { new Blog { Name = "Joe Delage", URL = "http://IT屋/joe/"}, new Blog {Name = "Mark Dsouza", URL = "http://IT屋/mark"}, new Blog {Name = "Michael Shawn", URL = "http://IT屋/michael"} }; public ActionResult StonglyTypedIndex() { return View(topBlogs); } public ActionResult IndexNotStonglyTyped() { return View(topBlogs); } } }
在上面的代码中,我们定义了两个操作方法: StronglyTypedIndex 和 IndexNotStonglyTyped .我们现在将为这些操作方法添加视图.
右键单击StonglyTypedIndex操作方法,然后单击添加视图.在下一个窗口中,选中"创建强类型视图"复选框.这也将启用Model Class和Scaffold模板选项.从"脚手架模板"选项中选择"列表".单击添加.
一个类似于的视图文件将创建以下屏幕截图.您可以注意到,它在顶部包含了ViewDemoController的Blog模型类.您还可以使用此方法在代码中使用IntelliSense.
动态类型视图
要创建动态类型视图,请右键单击IndexNotStonglyTyped操作,然后单击添加视图.
这次,请不要选中"创建强类型视图"复选框.
生成的视图将包含以下代码 :
@model dynamic @{ ViewBag.Title = "IndexNotStonglyTyped"; }Index Not Stongly Typed
- @foreach (var blog in Model) {
- @blog.Name }
正如您在上面的代码中所看到的,这次它没有像前一种情况那样将Blog模型添加到View中.此外,这次你将无法使用IntelliSense,因为这次绑定将在运行时完成.
强类型视图被认为是一种更好的方法,因为我们已经知道了什么数据作为模型传递,而不像动态类型视图,其中数据在运行时绑定,如果链接模型中的某些内容发生更改,则可能导致运行时错误.