- ASP.NET MVC 教程
- ASP.NET MVC - 主页
- ASP.NET MVC - 概述
- ASP.NET MVC - 模式
- ASP.NET MVC - 环境设置
- ASP.NET MVC - 入门
- ASP.NET MVC - 生命周期
- ASP.NET MVC - 路由
- ASP.NET MVC - 控制器
- ASP.NET MVC - 操作
- ASP.NET MVC - 过滤器
- ASP.NET MVC - 选择器
- ASP.NET MVC - 视图
- ASP.NET MVC - 数据模型
- ASP.NET MVC - 帮助程序
- ASP.NET MVC - 模型绑定
- ASP.NET MVC - 数据库
- ASP.NET MVC - 验证
- ASP.NET MVC - 安全
- ASP.NET MVC - 缓存
- ASP.NET MVC - 剃刀
- ASP.NET MVC - 数据注释
- Nuget包管理
- ASP.NET MVC - Web API
- ASP.NET MVC - 脚手架
- ASP.NET MVC - 引导程序
- ASP.NET MVC - 单元测试
- ASP.NET MVC - 部署
- ASP.NET MVC - 自托管
- ASP.NET MVC 有用资源
- ASP.NET MVC - 快速指南
- ASP.NET MVC - 有用的资源
- ASP.NET MVC - 讨论
ASP.NET MVC - 选择器
操作选择器是可应用于操作方法的属性,用于影响调用哪个操作方法来响应请求。它帮助路由引擎选择正确的操作方法来处理特定的请求。
当您编写操作方法时,它起着非常重要的作用。这些选择器将根据操作方法前面给出的修改名称来决定方法调用的Behave。它通常用于操作方法名称的别名。
动作选择器属性分为三种类型 -
- 动作名称
- 不采取行动
- Behave动词
动作名称
此类表示用于操作名称的属性。它还允许开发人员使用与方法名称不同的操作名称。
让我们看一下上一章中的一个简单示例,其中 HomeController 包含两个操作方法。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCFiltersDemo.Controllers { public class HomeController : Controller{ // GET: Home public string Index(){ return "This is ASP.Net MVC Filters Tutorial"; } public string GetCurrentTime(){ return DateTime.Now.ToString("T"); } } }
让我们通过在 GetCurrentTime() 上方写入 [ActionName("CurrentTime")] 来应用 GetCurrentTime 的 ActionName 选择器,如以下代码所示。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCFiltersDemo.Controllers { public class HomeController : Controller{ // GET: Home public string Index(){ return "This is ASP.Net MVC Filters Tutorial"; } [ActionName("CurrentTime")] public string GetCurrentTime(){ return DateTime.Now.ToString("T"); } } }
现在运行此应用程序并在浏览器中输入以下 URL http://localhost:62833/Home/CurrentTime,您将收到以下输出。
你可以看到我们使用了CurrentTime来代替原来的action名称,即上面URL中的GetCurrentTime。
不采取行动
NonAction 是另一个内置属性,它指示 Controller 的公共方法不是操作方法。当您希望某个方法不应该被视为操作方法时,可以使用它。
让我们看一个简单的示例,在 HomeController 中添加另一个方法,并使用以下代码应用 NonAction 属性。
using MVCFiltersDemo.ActionFilters; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCFiltersDemo.Controllers { public class HomeController : Controller{ // GET: Home public string Index(){ return "This is ASP.Net MVC Filters Tutorial"; } [ActionName("CurrentTime")] public string GetCurrentTime(){ return TimeString(); } [NonAction] public string TimeString(){ return "Time is " + DateTime.Now.ToString("T"); } } }
新方法 TimeString 是从 GetCurrentTime() 调用的,但您不能将其用作 URL 中的操作。
让我们运行此应用程序并在浏览器中指定以下 URL http://localhost:62833/Home/CurrentTime 。您将收到以下输出。
现在让我们检查URL 中的/TimeString作为操作,看看会发生什么。
您可以看到它给出了“404—Not Found”错误。
Behave动词
您可以应用的另一个选择器过滤器是 ActionVerbs 属性。因此,这限制了对特定 HttpVerbs 的特定操作的指示。您可以定义两个具有相同名称的不同操作方法,但一个操作方法响应 HTTP Get 请求,另一个操作方法响应 HTTP Post 请求。
MVC 框架支持以下 ActionVerb。
- HttpGet
- HttpPost
- HttpPut
- Http删除
- Http选项
- Http补丁
让我们看一个简单的例子,我们将在其中创建 EmployeeController。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers { public class EmployeeController : Controller{ // GET: Employee public ActionResult Search(string name = “No name Entered”){ var input = Server.HtmlEncode(name); return Content(input); } } }
现在让我们使用以下代码添加另一个同名的操作方法。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers { public class EmployeeController : Controller{ // GET: Employee //public ActionResult Index() //{ // return View(); //} public ActionResult Search(string name){ var input = Server.HtmlEncode(name); return Content(input); } public ActionResult Search(){ var input = "Another Search action"; return Content(input); } } }
当您运行此应用程序时,它将给出错误,因为 MVC 框架无法确定应为请求选择哪个操作方法。
让我们使用以下代码指定 HttpGet ActionVerb 以及您想要作为响应的操作。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers { public class EmployeeController : Controller{ // GET: Employee //public ActionResult Index() //{ // return View(); //} public ActionResult Search(string name){ var input = Server.HtmlEncode(name); return Content(input); } [HttpGet] public ActionResult Search(){ var input = "Another Search action"; return Content(input); } } }
当您运行此应用程序时,您将收到以下输出。