我想从RedirectToAction方法传递多个参数
我怎么能通过?
我的一个行动方法
[HttpPost, ActionName("SelectQuestion")]
public ActionResult SelectQuestion(string email,List<QuestionClass.Tabelfields> model)
{
List<QuestionClass.Tabelfields> fadd = new List<QuestionClass.Tabelfields>();
for (int i = 0; i < model.Count; i++)
{
if (model[i].SelectedCheckbox == true)
{
List<QuestionClass.Tabelfields> f = new List<QuestionClass.Tabelfields>();
fadd.Add(model[i]);
}
}
return RedirectToAction("Question", new { email = email, model = fadd.ToList() });
}
我的另一个行动方法
[HttpGet]
public ActionResult Question(string email,List<QuestionClass.Tabelfields> model)
{
}
我没有在模型中获取值。
答案 0 :(得分:22)
重定向时,您无法在网址中传递复杂对象的集合。
一种可能性是使用TempData:
TempData["list"] = fadd.ToList();
return RedirectToAction("Question", new { email = email});
然后在问题行动中:
var model = TempData["list"] as List<QuestionClass.Tablefields>;
答案 1 :(得分:4)
这可能不再活跃了,但我会留下我在这里做的事情,也许可以帮助别人。
我使用简单的重定向而不是RedirectToAction解决了这个问题:
List<int> myList = myListofItems;
var list = HttpUtility.ParseQueryString("");
myList.ForEach(x => list.Add("parameterList", x.ToString()));
return Redirect("/MyPath?" + list);
然后,在你的另一种方法上:
public ActionResult Action(List<int> parameterList){}
答案 2 :(得分:1)
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<QuestionClass.Tabelfields> fadd=repositary.GetTabelFieldsFromID(id);
//Do whatever with this
return View();
}
假设repositary.GetTabelFieldsFromID
从Id
TabelFields
的列表
答案 3 :(得分:1)
我解决这个问题的方法是使用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<QuestionClass.Tabelfields> model = JsonConvert.DeserializeObject<List<QuestionClass.Tabelfields>>(serializedModel);
}
重要,这会将模型作为查询字符串参数添加到您的网址,因此只能使用非常简单的小对象,否则您的网址会太长。