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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM