json数组传递到后台controller

现前台有如下格式的数据需要传递到后台的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.

 

转载于:https://www.cnblogs.com/huanghaihua/p/5028677.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值