控制器和动作方法之控制器Controller

到达应用程序的每一个请求都是由控制器处理的。只要不偏离到属于模型和视图职责的领域,控制器可以以它认为合适的方式自由地处理请求。
在ASP.NET MVC框架中,控制器是含有请求处理逻辑的.NET类。控制器的作用是

		 1.负责处理输入请求
		 2.执行域模型上的操作
		 3.选择渲染给用户的视图

创建一个控制器,需要实现IController接口或继承Controller类

1.使用IController创建控制器
在Controller文件夹下,添加一个类文件:BasicController.cs

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

namespace MVC_Project05.Controllers
{
    public class BasicController : IController
    {
        public void Execute(RequestContext requestContext)
        {
            string controllerName = requestContext.RouteData.Values["controller"].ToString();
            string actionName = requestContext.RouteData.Values["action"].ToString();
            if (actionName.ToLower()=="redirect") {
                //重定向到指定的URL:底层还是动作方法的调用                requestContext.HttpContext.Response.Redirect("/Derived/Index");
            }
            requestContext.HttpContext.Response.Write(
             string.Format("Controller:{0},Action:{1}",controllerName,actionName)   
             );
        }
    }
}

Result:
输入地址:
在这里插入图片描述

跳转到的页面:
在这里插入图片描述
IController接口,是一个很简单的接口,唯一的方法Execute,在请求以控制器类为目标被调用。
IController接口
Execute ()方法接收的是一个System.Web.Routing.RequestContext requestContext对象,该对象它提供关于当前请求与匹配路由的信息(导致控制器被调用处理请求)。

		HttpContext属性     返回一个描述当前请求的HttpContextBase对象
		RouteData属性	  返回一个描述匹配请求路由的RouteData对象

RouteData对象描述了路由,有几个比较重要的属性:

		Route      返回匹配路由的RouteBase实现
		Values    返回按命名索引的片段值的集合

总结1:
实现IController接口所创建的类,MVC框架会将其视为是一个控制器,并将请求发送给它,而且在处理请求和响应请求上没有任何限制。

2.创建派生于Controller的控制器
使用Controller类,用来支持对请求处理提供支持的类。
Controller类提供以下三个关键特性:

		1动作方法(Action Method):一个控制器的行为被分解成多个方法
		(而不是只有一个单一的)。每个动作方法被暴露给不同的URL,并通过从输入请求提取的参数进行调用。
		2.动作结果(Action Result):可以返回一个描述动作结果的对象(例如:1.渲染视图 2.重定向到一个不同的URL或动作方法)

除非你有一个非常明确的需求,创建控制器的最好方法就是通过Controller类进行派生,Controllers文件夹–>添加(右击)---->控制器

Demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC_Project05.Models;
namespace MVC_Project05.Controllers
{
    public class DerivedController : Controller
    {
        // GET: Derived
        public ActionResult Index(int num=0)
        {
            ViewBag.Message = "Hello from the DerivedController Index Method";
            return View("MyView");           
        }
    }
}

在Views文件下的子文件夹Derived下,添加MyView视图文件:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>MyView</title>
</head>
<body>
    <div> 
        Message:@ViewBag.Message
    </div>
</body>
</html>

Result:
在这里插入图片描述
总结2:
作为Controller类的一个派生类,所要做的工作就是实现动作方法、获取所需要的各种输入,以对请求进行处理,并生成一个适当的响应。
3.接收请求参数
控制器经常需要访问来自于输入请求的数据,如查询字符串、表单值、以及路由参数,访问这些数据有三个主要的途径:

		1.通过一组上下文对象进行提取
		2.作为参数(Parameters)被传递给动作方法而形成的数据
		3.明确地调用框架的模型绑定

在这里插入图片描述
在这里插入图片描述
具体的用法,请看下面之前写的两篇文章:
MVC中几种常用传参方式以及在后台中获取客户端请求参数值
ASP.NET 几种常用的页面传值的方式

理解参数对象实例化:
Controller基类使用叫做"值提供器"和"模型绑定器"的MVC框架组件来获取动作方法的参数。有一组内建的值提供器,会抓取Request.Form、Request.QueryString、Request.Files以及RouteData.Values的数据项。
默认的模型绑定器能够创建并填充任何.NET类型的对象,包括集合和项目专用的自定义类型。

理解可选参数和强制参数:
如果MVC框架找不到引用类型参数(如string或object)的值,动作方法仍然会被调用,但对参数会赋null值。若找不到值类型(如int或double)的值,则会抛出异常且不会被调用。
1.值类型参数是强制的,调用Action动作方法时,必须传入,为了使其成为可选,可以给参数指定一个默认值
Demo:

 public ActionResult Index(int num=0)
 {
	................................
	................................
}

2.引用类型参数是可选的,为了使它们成为必需的(以保证传递一个非空值),比如;可以抛出一个ArgumentNullException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值