• 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.

  • 相关阅读:
    Restful API
    事件冒泡
    DOM性能
    获取dom节点的所有子节点
    获取dom节点的父节点
    深拷贝
    Dropdown下拉菜单
    Breadcrumb面包屑
    【vue】----生产环境去除cosole.*
    刷leetcode时,重新认识LinkedList实现栈、队列或者双端队列
  • 原文地址:https://www.cnblogs.com/huanghaihua/p/5028677.html
Copyright © 2020-2023  润新知