json数组传递到后台controller

摘要:
前台中以下格式的数据需要传输到后台的控制器:1publicclassUpdatePara2{3 publicRoleID{get;set;}4 publicList<int>FunctionID{get;set;}5} 如果数据以正常方式传输,则后台的控制器代码应为1publicJsonResultUpdate(UpdateParapara)2{3

现前台有如下格式的数据需要传递到后台的controller,

1 public class UpdatePara 
2 {
3   public int RoleID { get; set; }
4   public List<int> FunctionIDs { get; set; }
5 }

如果按照常规方式传递,后台的controller代码应该是下面这样的

1 public JsonResult Update(UpdatePara para) 
2 {
3   var flag = BLLRolePermission.Update(para.RoleID, para.FunctionIDs);
4    return Json(new { success = flag });
5 }

但是由于这里的FunctionIDs是个数组,如果按照上面这种方式接收参数,我们会发现para.FunctionIDs是null

为了正确获取参数值,我们需要自定义个过滤器,代码如下:

 1 public class JsonFilter : ActionFilterAttribute
 2     {
 3         public string ParamName { get; set; }
 4         public Type JsonDataType { get; set; }
 5 
 6         public override void OnActionExecuting(ActionExecutingContext filterContext)
 7         {
 8             string inputContent;
 9             var jss = new JavaScriptSerializer();
10 
11             using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
12             {
13                 inputContent = sr.ReadToEnd();
14             }
15 
16             var result = jss.Deserialize(inputContent, JsonDataType);
17 
18             filterContext.ActionParameters[ParamName] = result;
19         }
20     }

然后,对应的Action方法应该加上过滤器标记

1 [JsonFilter(ParamName = "para", JsonDataType = typeof(UpdatePara))]
2 public JsonResult Update(UpdatePara para) 
3 {
4   var flag = BLLRolePermission.Update(para.RoleID, para.FunctionIDs);
5 
6   return Json(new { success = flag });
7 }

同时要注意下前台ajax传参的时候,json对象要序列化下

1 JSON.stringify({
2             roleID: $('#roleID').val(),
3             functionIDs: functionIDs
4 });

That's all.

免责声明:文章转载自《json数组传递到后台controller》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基础篇-Windows保护模式python Faker插件--模拟测试数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

(4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)

Opensslrsa是RSA对称密钥的处理工具。opensslpkey是一种通用的非对称密钥处理工具。它们的用法基本相同,因此只有opensslrssa通过示例进行了说明。-Outfilename:默认情况下,opensslrss用于读取文件中的公钥或私钥并将其显示到stdout,此选项用于将读取的内容输出到指定的文件-Passonarg:传递解密密钥文件的...

vSphere HA 原理与配置

应当基于可用性需求和群集的特性选择vSphereHA接入控制策略。...

解决IDEA打包出现中文乱码的问题

解决方案:1.打开IDEA文件中的设置。...

批处理bat脚本自动配置java的jdk环境变量

前言每次更换计算机或重新安装系统时,都需要重新配置java系统路径。但我不想每次都检查配置方法,所以我编写了一个脚本来自动配置。脚本内容@echooff@echo步骤1:输入要设置的JAVA_HOME路径:set/pinput=“请输入JAVA_HOME路径:”@echo步骤2:设置JAVA_ HOME路径setxJAVA_HOME“%input%”/M@e...

windows下如何查看和修改MySQL的端口号

更改为要设置的新端口号。4.在桌面上找到“我的电脑”,右键单击并选择“管理”5.找到“服务和应用程序”并双击6.继续双击“服务”7.在列表中找到“MySQL”,右击并选择“重新启动”8.等待重新启动完成,然后按照我们刚才用来查看MySQL端口号的方法查看更改是否成功。如图所示,3396是我更改的端口号。...

解决curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to raw.githubusercontent.com:443 错误

报告命令curl-o时出错-https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh| bash错误状态的原因是未安装git。使用以下命令安装git,然后执行上面的命令sudoapt-geinstallgit-referencehttps://www.pianshen.com/articl...