[MVC] 自定义ActionSelector,根据参数选择Action[转载]
很多时候我们会根据UI传入的参数,呈现不同的View。也就是对于同一个Action如何根据请求数据返回不同的View。通常情况下我们会按照如下方法来写,例如:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LoadTreeNodes(TreeViewItem treeViewItem)
{
var nodeText = treeViewItem.Text.ToLower();
if (nodeText == "videos")
{
……
return View("videos");
}
if (nodeText == "news")
{
……
return View("news");
}return View("index");
}
这个时候Action 里面会有很多的if else. 其实,我们忽略了MVC 提供的 ActionNameSelectorAttribute. 我们完全可以自定义ActionNameSelectorAttribute来实现上诉功能。 MVC中的ActionNameAttribute就是继承自ActionNameSelectorAttribute。达到多个Action对应同一个ActionName的目的。
自定义TreeNodeActionSelectorAttribute
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class TreeNodeActionSelectorAttribute : ActionNameSelectorAttribute
{
public string TreeNodeText { get; private set; }
public TreeNodeActionSelectorAttribute(string nodeText)
{
if (String.IsNullOrEmpty(nodeText))
{
throw new ArgumentException("nodeText");
}
this.TreeNodeText = nodeText;
}
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
var text = controllerContext.RequestContext.HttpContext.Request["text"];
return String.Equals(this.TreeNodeText, text, StringComparison.OrdinalIgnoreCase);
}
}
改造Action
[ActionName(“LoadTreeNodes”)]
[TreeNodeActionSelector (“videos”)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LoadVideoNodes(TreeViewItem treeViewItem)
{
……
return View("videos");
}
[ActionName(“LoadTreeNodes”)]
[TreeNodeActionSelector (“news”)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LoadNews(TreeViewItem treeViewItem)
{
……
return View("news");
}
......
有些时候我们可能需要根据用户属于不同的角色,返回不同的View。这种情况也可以通过自定义ActionNameSelectorAttribute来实现。具体如何做请参考:http://www.cnblogs.com/anytao/archive/2009/04/22/1440883.html
[MVC] 自定义ActionSelector,根据参数选择Action[转载]的更多相关文章
- [MVC] 自定义ActionSelector,根据参数选择Action
很多时候我们会根据UI传入的参数,呈现不同的View.也就是对于同一个Action如何根据请求数据返回不同的View.通常情况下我们会按照如下方法来写,例如: [AcceptVerbs(HttpVer ...
- MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器
实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器 MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过A ...
- ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)
ASP.NET MVC 一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [ ...
- [置顶]
MVC输出缓存(OutputCache参数详解)
1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...
- MVC输出缓存(OutputCache参数详解)
版权声明:本文为博主原创文章,未经博主允许转载随意. https://blog.csdn.net/kebi007/article/details/59199115 1.学习之前你应该知道这些 几乎每个 ...
- Web APi之控制器选择Action方法过程(九)
前言 前面我们叙述了关于控制器创建的详细过程,在前面完成了对控制器的激活之后,就是根据控制器信息来查找匹配的Action方法,这就是本节要讲的内容.当请求过来时首先经过宿主处理管道然后进入Web AP ...
- mvc自定义全局异常处理
异常信息处理是任何网站必不可少的一个环节,怎么有效显示,记录,传递异常信息又成为重中之重的问题.本篇将基于上篇介绍的html2cancas截图功能,实现mvc自定义全局异常处理.先看一下最终实现效果: ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- ASP.NET MVC 后台接收集合参数和 jquery ajax 传值
MVC 接收参数数组(集合) 示例样本: public class Person { public string FirstName { get; set; } publi ...
随机推荐
- IDEA 的操作与使用
idea 设置syso File –> Setting –> Editor –> Live Templates debug 调试: F7 在 Debug 模式下,进入下一步,如果当前 ...
- [.Net Core] - 使用 NLog 记录日志到 Sql Server
1. 使用 Nuget 安装 NLog. 2. 在 Sql Server 中创建 NLog 数据表. CREATE TABLE [dbo].[NLogInfo]( ,) NOT NULL, [Date ...
- Redis的安装(windows)
一.安装redis windows版本的下载在https://github.com/MicrosoftArchive/redis/tags msi是安装版,zip的解压就能用.建议下msi的. 下载挺 ...
- Hystrix【参数配置及缓存】
1.常用参数说明 hystrix参数的详细配置可参照 https://github.com/Netflix/Hystrix/wiki/Configuration 下面是一些常用的配置: 配置项 默认值 ...
- win10安装Ubuntu,用Xshell连接
一.安装Ubuntu 安装Ubuntu,安装过程就不详细说了,我是从微软商店下载的Ubuntu安装,没有用VMware,想用Xshell连接Ubuntu,中间一直出问题,现在解决,总结一下. 二.配置 ...
- 第四章 函数之lambda 表达式和内置函数
4.5 lambda 表达式 用于表示简单的函数. # 三元运算,为了解决简单的if else的情况,如:if 1 == 1: a = 123else: a = 456# 相当于a = 1 ...
- PAT甲级题分类汇编——图
本文为PAT甲级分类汇编系列文章. 图,就是层序遍历和Dijkstra这一套,#include<queue> 是必须的. 题号 标题 分数 大意 时间 1072 Gas Station 3 ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- TZOJ1299: 畅通工程
#include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #i ...
- 15. Scala并发编程模型Akka
15.1 Akka介绍 1) Akka是Java虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,可以理解成Akka是编写并发程序的框架 2) Akka用Scala语言写成,同时提供了S ...