65.9K
CodeProject 正在变化。 阅读更多。
Home

所有 ASP.NET MVC 3 功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (4投票s)

2013年12月6日

CPOL

7分钟阅读

viewsIcon

24278

所有 ASP.NET MVC 3 功能

引言

可以从此处在 Visual Studio 2010 中安装 MVC 3。

MVC 3 在项目模板、控制器、模型和视图方面引入了许多新功能。

MVC 3 已于 2010 年 11 月 9 日正式发布。

所有 MVC 3 功能

MVC 3 功能分类如下

  1. MVC 项目模板
  2. 视图
  3. 控制器 (Controller)
  4. 模型

一、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 开始,默认启用客户端验证。客户端验证完全使用 JQueryJQueryValidation 库。

三、控制器

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();
    }    
  • 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 中可用的所有功能。希望您喜欢阅读整个主题。请提供您的投票建议和反馈……以鼓励我撰写更多博客。

© . All rights reserved.