如何在Redirecttoaction中传递List

Aja*_*y P 11 c# controller actionresult asp.net-mvc-3

我想从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() });
    }
Run Code Online (Sandbox Code Playgroud)

我的另一种行动方法

    [HttpGet]
    public ActionResult Question(string email,List<QuestionClass.Tabelfields> model)
    {
    }
Run Code Online (Sandbox Code Playgroud)

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

Pab*_*aus 22

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

一种可能是使用TempData:

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

然后在问题行动中:

var model = TempData["list"] as List<QuestionClass.Tablefields>;
Run Code Online (Sandbox Code Playgroud)


Tim*_*kin 5

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

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

return RedirectToAction("Question", 
    new { 
        email = email, 
        serializedModel = JsonConvert.SerializeObject(fadd.ToList()) 
    });
Run Code Online (Sandbox Code Playgroud)

在您的 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);
}
Run Code Online (Sandbox Code Playgroud)

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