如何通过名单Redirecttoaction(How to pass List in Redirec

2019-06-27 07:48发布

我想通过从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() });
    }

我的另一个Action方法

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

我没有在模型得到的值。

Answer 1:

重定向时,你不能传递复杂对象的集合中的URL。

一种可能性是使用TempData的:

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

然后问行动中:

var model = TempData["list"] as List<QuestionClass.Tablefields>;


Answer 2:

这可能不是好动了,但我会离开我做到了这里也许帮助别人。

我解决了这个用一个简单的重定向,而不是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){}


Answer 3:

RedirectToAction方法返回HTTP 302响应于所述浏览器,这会导致浏览器作出GET请求到指定的操作。

您应该保持像一个临时存储数据TempData / Session 。 TempData的使用会话作为后备存储。

如果你想保持它真正的无状态的,你应该通过一个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返回列表TabelFields从ID



Answer 4:

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

因此,在您SelectQuestion方法,你能使用此代码:

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

而在你的问题的方法,你可以使用这个代码反序列化对象。

[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);
}

重要的是 ,这增加了该模型作为查询字符串参数到您的网址,所以只用很简单的小物件做到这一点,否则你的网址将会太长。



文章来源: How to pass List in Redirecttoaction