返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller

简介: 原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller[索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net mvc 3.
原文: 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller

[索引页]
[源码下载]


返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller



作者:webabcd


介绍
asp.net mvc 之 asp.net mvc 3.0 新特性之 Controller:

  • Global Action Filter
  • 可以在标记为 ChildActionOnly 的 Action 上使用 OutputCache
  • ViewBag
  • 新增了一些 Action Result



示例
1、Global Action Filter 的 Demo
Global.asax.cs(注册全局的 Action Filter)

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);

    /*
     * 演示 Global Action Filter
     */

    // 实例化一个 Filter
    var handleError = new HandleErrorAttribute();
    // 指定 HandleErrorAttribute 的 View
    handleError.View = "Error2";
    // Order 属性的默认值为:-1,即不会被应用,所以这里要修改一下
    handleError.Order = 0;

    // 将 Filter 对象添加到全局 Filters 集合中
    GlobalFilters.Filters.Add(handleError);
}

 

Web.config

<system.web>
        
    <!--
        如果需要启用 HandleError ,那么要在 web.config 中做如下配置:<customErrors mode="On" />   
    -->
    <customErrors mode="On" />
    
</system.web>

 

ControllerDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVC30.Controllers
{
    public class ControllerDemoController : Controller
    {
        // 用于演示 Global Action Filter
        public ActionResult GlobalActionFilter()
        {
            throw new Exception("exception");
        }
    }
}

 

GlobalActionFilter.cshtml(访问此页会抛出异常,然后跳转到Error2)

@{
    ViewBag.Title = "Global Action Filter";
}

<h2>GlobalActionFilter</h2>

 

Error2.cshtml(自定义错误页)

@{
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
    <title>Error</title>
</head>
<body>
    <!--
        HTTP 返回 500 时,页面必须输出足够多的信息才会显示,否则只会显示 IE 的 HTTP 500 默认页
    -->
    <h2>
        Sorry, an error occurred while processing your request
    </h2>
    <h2>
        Sorry, an error occurred while processing your request
    </h2>
    <h2>
        Sorry, an error occurred while processing your request
    </h2>
    <h2>
        Sorry, an error occurred while processing your request
    </h2>
    <h2>
        Sorry, an error occurred while processing your request
    </h2>
</body>
</html>

 


2、标记为 ChildActionOnly 的 Action 支持 OutputCache
ControllerDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVC30.Controllers
{
    public class ControllerDemoController : Controller
    {
        public ActionResult ChildActionOnlyDemo()
        {
            return View();
        }

        // ChildActionOnly - 指定 Action 只能让 RenderAction 调用
        // OutputCache() - 缓存。Duration - 缓存秒数。VaryByParam - none, *, 多个参数用逗号隔开。也可以通过配置文件对缓存做设置
        [ChildActionOnly]
        [OutputCache(Duration = 5)]
        public PartialViewResult _GetCurrentTime()
        {
            var currentTime = DateTime.Now;

            return PartialView(currentTime);
        }
    }
}

 

_GetCurrentTime.cshtml

@*
    通过 @model 指定 Model 的类型,同时 Model 对象就是 Action 返回的数据
*@

@model DateTime

<div>
    currentTime: @Model.ToString("yyyy-MM-dd HH:mm:ss")
</div>

 

ChildActionOnlyDemo.cshtml

@{
    ViewBag.Title = "可以在标记为 ChildActionOnly 的 Action 上使用 OutputCache";
}

<h2>ChildActionOnlyDemo</h2>

<div>
    @{ Html.RenderAction("_GetCurrentTime"); }
    <!--
        <% Html.RenderAction("_GetCurrentTime"); %>
    -->
</div>

<div>
    @Html.Action("_GetCurrentTime")
    <!--
        <%= Html.Action("_GetCurrentTime") %>
    -->
</div>

 <!--
    Html.Action 与 Html.RenderAction 的区别:
        Html.Action - 直接将 Action 的结果作为一个字符串输出
        Html.RenderAction - 将 Action 作为一个用户控件嵌入到当前的 HttpContext 中
 -->

 


3、 新增了 ViewBag
ControllerDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVC30.Controllers
{
    public class ControllerDemoController : Controller
    {
        // 用于 ViewBagDemo
        public ActionResult ViewBagDemo()
        {
            // ViewBag 的本质就是把 ViewData 包装成为 dynamic 类型
            ViewBag.Message = "ViewBag 的 Demo";

            return View();
        }
    }
}

 

ViewBagDemo.cshtml

@{
    ViewBag.Title = "ViewBag";
}

<h2>ViewBag</h2>

Message: @ViewBag.Message

 


4、 新增的 Action Result

<p>
    Controller 中新增了一些 Action Result: HttpNotFoundResult, HttpRedirectResult, HttpStatusCodeResult
</p>

 


OK
[源码下载] 

目录
相关文章
|
17天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
2月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
2月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
84 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
47 0
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
124 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
119 0
|
10月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
145 0
|
10月前
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
123 0