如何在Redirecttoaction中传递List

我想从RedirectToAction方法传递多个参数

我怎么能通过?

我的一个行动方法

[HttpPost, ActionName("SelectQuestion")] public ActionResult SelectQuestion(string email,List model) { List fadd = new List(); for (int i = 0; i < model.Count; i++) { if (model[i].SelectedCheckbox == true) { List f = new List(); fadd.Add(model[i]); } } return RedirectToAction("Question", new { email = email, model = fadd.ToList() }); } 

我的另一种行动方法

  [HttpGet] public ActionResult Question(string email,List model) { } 

我没有在模型中获得价值。

重定向时,无法在URL中传递复杂对象的集合。

一种可能是使用TempData:

 TempData["list"] = fadd.ToList(); return RedirectToAction("Question", new { email = email}); 

然后在问题行动中:

 var model = TempData["list"] as List; 

这可能不再活跃了,但我会留下我在这里做的可能帮助其他人。

我使用简单的Redirect而不是RedirectToAction解决了这个问题:

 List myList = myListofItems; var list = HttpUtility.ParseQueryString(""); myList.ForEach(x => list.Add("parameterList", x.ToString())); return Redirect("/MyPath?" + list); 

然后,在你的另一种方法:

 public ActionResult Action(List parameterList){} 

RedirectToAction方法返回对浏览器的HTTP 302响应,这会导致浏览器向指定的操作发出GET请求。

您应该将数据保存在TempData / Session等临时存储中。 TempData使用Session作为后备存储。

如果你想保持它真正无状态,你应该在查询字符串中传递一个id并获取你的GET动作中的项目列表。 真正无国籍。

 return RedirectToAction("Question", new { email = email,id=model.ID }); 

并在你的GET方法

 public ActionResult Question(string email,int id) { List fadd=repositary.GetTabelFieldsFromID(id); //Do whatever with this return View(); } 

假设repositary.GetTabelFieldsFromID从Id返回repositary.GetTabelFieldsFromID的List

我解决这个问题的方法是使用Newtonsoft.Json nuget包中的JsonConvert方法将列表序列化为JSON对象。 然后,序列化列表可以作为参数传递,然后再次反序列化以重新创建原始列表。

因此,在SelectQuestion方法中,您将使用以下代码:

 return RedirectToAction("Question", new { email = email, serializedModel = JsonConvert.SerializeObject(fadd.ToList()) }); 

在您的Question方法中,您将使用此代码反序列化对象。

 [HttpGet] public ActionResult Question(string email, string serializedModel) { // Deserialize your model back to a list again here. List model = JsonConvert.DeserializeObject>(serializedModel); } 

重要的是 ,这会将模型作为查询字符串参数添加到您的url,因此只能使用非常简单的小对象,否则您的url会太长。