所有 ASP.NET MVC 3 功能






4.50/5 (4投票s)
所有 ASP.NET MVC 3 功能
引言
可以从此处在 Visual Studio 2010 中安装 MVC 3。
MVC 3 在项目模板、控制器、模型和视图方面引入了许多新功能。
MVC 3 已于 2010 年 11 月 9 日正式发布。
所有 MVC 3 功能
MVC 3 功能分类如下
- MVC 项目模板
- 视图
- 控制器 (Controller)
- 模型
一、MVC 项目模板
1. 新的内网项目模板
MVC 3 中新增了“内网应用程序”项目模板。此项目模板只会删除帐户控制器并添加 Windows 身份验证。
2. 可扩展的 Scaffolding 与 MvcScaffold 集成
Scaffold 模板将自动生成基础代码,这将为演示提供快速开发(:我们可以根据我们的要求进行编辑。
3. HTML 5 项目模板
当我们创建新项目时,有一个复选框选项来支持项目的 HTML 5。
4. 可扩展的“新建项目”对话框
当我们使用 MVC 3 创建新项目时,我们有项目模板的选项,用于视图引擎和单元测试项目模板。
二、视图
1. Razor 视图引擎
Razor 视图引擎已随 Visual Studio 2010 在 ASP.NET MVC 3 中引入。这是与 MVC 框架最兼容且建议的引擎。
什么是 Razor 视图:Razor 是一种标记语法,它将服务器基础代码嵌入到网页中。Razor 不是一种编程语言。它是一种服务器端标记语言。借助服务器基础代码,我们可以创建动态网页。如果浏览器请求任何动态页面,则服务器基础代码将在网页内部执行,并且完整的 HTML 版本将返回到浏览器。
优点
- 这提供了优化的语法,通过以代码为中心的模板方法生成 HTML,这种方法最大限度地减少了代码和 HTML 之间的事务。它还减少了字符和击键的数量。
- Razor 语法简洁明了。
- 无需运行应用程序或 Web 服务器即可进行单元测试。
- 具有与 ASP.NET 中的主页相同的“布局”页面。
- Razor 具有 Visual Studio 的 IntelliSense 和代码着色功能。
- 易于学习,因为它基于 C# 和 Visual Basic。
- 这支持 TDD 开发,因为 Razor 不依赖于
System.Web.UI.Page
类。 - Razor 默认通过在渲染到视图之前对脚本或 HTML 标签“< >”进行编码来防止 XSS 攻击。
语法:Razor 使用“@
”字符表示代码块,这不需要显式关闭代码块。
示例
Hello World
Today DateTime: @DateTime.Now
2. 支持多种视图引擎
MVC 3 框架允许在同一项目中使用多种视图引擎。创建新项目时,我们必须选择默认视图引擎,当我们添加新视图时,我们可以选择不同的视图,例如“ASPX”或任何其他开源 Spark、NHaml 或 NDjango。
3. 部分页面输出缓存
从 MVC 1 版本开始,就支持页面缓存。MVC 3 中包含了部分页面缓存,它将缓存响应的区域或片段。
4. 对请求验证的精细控制
在 ASP.NET MVC 中,有一个内置的请求验证器,它将自动保护 XSS 和 HTML 注入攻击。有时,我们需要允许 HTML 内容,例如博客提交、CMS 系统或通过 HTML 编辑器提交内容,这可以通过 MVC 3 允许。
5. "Html.LabelFor" 和 "Html.LabelForModel" 的新重载
MVC 3 中添加了新的重载方法,即“@Html.LabelFor
”和“@Html.LabelForModel
”,通过此方法,我们可以指定标签文本或覆盖文本。
6. 默认启用客户端验证
在早期版本的 MVC 中,我们需要在视图中显式调用 Html.EnableClientValidation
来启用客户端验证。从 MVC 3 开始,默认启用客户端验证。客户端验证完全使用 JQuery
和 JQueryValidation
库。
三、控制器
1. 全局 Action 过滤器
MVC 2 引入了 Action 过滤器,它实际上将前置和后置 Action 行为应用于 Action 方法或控制器。在 MVC 3 中,引入了全局 Action 过滤器,它实际上将前置和后置 Action 行为应用于应用程序级别,这意味着我们可以在一个地方定义 Action 过滤器,并且它将适用于所有 Action 方法。
示例
假设我们需要对应用程序进行身份验证,那么我们必须对所有 Action 方法进行授权。现在,在 MVC 3 中,我们必须在一个地方进行,这将适用于整个应用程序。以下是实现方法:
打开 Global.Asax 并进行如下修改:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute()); //this is the line for global filter
//filters.Add(new HandleErrorAttribute());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters); //this is the line for global filter
RegisterRoutes(RouteTable.Routes);
}
2. 新的 "ViewBag" 属性
ViewBag
是一个动态属性,可用于将数据从控制器传递到视图。这将与 ViewData
相同,是后期绑定。它将在运行时获取和设置值,因为它是一个动态属性,内部使用 ViewData
对象作为名称/值对。
这是简单的语法
Controller:
ViewBag.Message=”this is view bag”;
View:
@ViewBag.Message
3. 新的 "ActionResult" 类型
以下是 MVC 3 中添加的新 Action 结果类型和相应的辅助方法:
HttpNotFoundResult
:这将向客户端返回 404 错误代码。- Action 结果类型:“
HttpNotFoundResult
” - 辅助方法:“
HttpNotFound
”
public ActionResult PageNotFound() { return HttpNotFound(); } public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; var result = new HttpNotFoundResult(); // var result = new HttpNotFoundResult("Page not found"); //we can pass the parameter also return result; //return View(); }
- Action 结果类型:“
RedirectResult
:Redirect 结果添加了三个新的辅助方法用于永久重定向,如下所示。所有这些都将向客户端返回状态码 301。RedirectPermanent
RedirectToRoutePermanent
RedirectToActionPermanent
HttpStatusCodeResult
:向浏览器返回用户定义的状态码。public ActionResult SpecificStatusCode() { var objProduct = new Product(); if (objProduct == null) return new HttpStatusCodeResult(418); return View(); }
4. 远程验证器
MVC 3 添加了一个新的属性 RemoteAttribute
类,它使我们能够利用 JQuery 验证插件和自定义类方法进行服务器端代码验证。
示例:假设我们有一个产品类,并且想用产品 ID 进行检查,以查看产品 ID 是否已存在于数据库中。
Modal code:
[Remote("IsProductExist","productid")]
public int ID { get; set; }
public string Name { get; set; }
Controller code:
public bool IsProductExist(int productid)
{
if (productid == null) //just give the proper object condition
return false;
else
return true;
}
5. JSON 绑定支持
MVC 3 默认允许我们发送和接收 JSON 对象数据。
6. 依赖注入改进
MVC 3 为依赖注入提供了更好的支持。通过 DI,我们将获得无数好处,这些好处在这里超出范围。MVC 3 将支持 Common Service Locator 库和任何支持 IServiceLocator
接口的 DI 容器。还支持 IDependencyResolver
接口,这将使 DI 轻松集成。
7. 无会话控制器支持
MVC 3 支持无会话控制器,也支持读或读/写选项。
四、模型
1. JavaScript 和 Ajax 改进
MVC 3 默认使用非侵入式框架进行客户端 JavaScript 验证。通过这种方法,我们无需将 JavaScript 验证代码注入到 HTML 控件中。它默认使用 JQueryValidation
插件来验证数据。
示例
public class ChangePasswordModel
{
[Required]
public string NewPassword { get; set; }
[Required]
public string ConfirmPassword { get; set; }
}
在上述代码中,当使用上述模型创建文本框时,classPassword
和确认密码将是必填字段。请访问此 URL 获取完整详细信息
2. 新的 "AdditionalMetadataAttribute" 类
AdditionalMetadataAttribute
将为模式视图数据提供特殊功能。假设我们必须向特定角色用户提供查看模式数据属性的功能,那么我们可以使用 AdditionalMetadataAttribute
。
示例
[AdditionalMetadata("Admin", true)]
public int ProductCode { get; set; }
在上述代码中,“ProductCode
”属性仅对管理员可见。
3. "DataAnnotations" 元数据属性
MVC 3 支持 DataAnnotation
元数据,例如 Displayattribute
。
4. "ValidationAttribute" 类
在 .NET Framework 4 中,ValidationAttribute
得到了增强,以支持新的 IsValid
方法重载,该方法提供了有关当前验证上下文的更多信息。这提供了一种非常增强的方法,可以根据模型属性进行验证。
示例
public class RegisterModel
{
[Required]
public string UserName { get; set; }
[Required]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.",
MinimumLength = 6)]
public string Password { get; set; }
[Display(Name = "Confirm password")]
[Compare("Password",
ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
5. 验证接口
IValidatableObject
:此接口将在模型级别执行验证,并生成在模型属性中定义的错误消息。在 MVC 3 中,当模型绑定到视图时,IValidatableObject
生成错误消息并绑定到 HTML 表单助手。IClientValidatable
:此接口将在运行时发现客户端验证是否已启用。此接口旨在支持各种验证框架。
摘要
我已尝试解释 ASP.NET MVC 3 中可用的所有功能。希望您喜欢阅读整个主题。请提供您的投票建议和反馈……以鼓励我撰写更多博客。