Asp.net mvc 4 通过“System.Collections.Generic.List`1[System.string]”传入ViewBag gets的列表

Asp.net mvc 4 通过“System.Collections.Generic.List`1[System.string]”传入ViewBag gets的列表,asp.net-mvc-4,Asp.net Mvc 4,我有一个到另一个控制器的链接,我想传递一个字符串列表 FirstController.cs 我有表中的记录列表,每行都有复选框,字符串值列表是通过选中复选框来选择的 public ActionResult Select(bool isChecked, String id) { var selectList = (List<String>)HttpContext.Session["SelectList"] ?? new List<String>(); if

我有一个到另一个控制器的链接,我想传递一个字符串列表

FirstController.cs

我有表中的记录列表,每行都有复选框,字符串值列表是通过选中复选框来选择的

public ActionResult Select(bool isChecked, String id)
{
    var selectList = (List<String>)HttpContext.Session["SelectList"] ?? new List<String>();
    if (isChecked && !selectList.Contains(id))
    {
        selectList.Add(id);
    }
    else if (!isChecked && selectList.Contains(id))
    {
        selectList.RemoveAll(s => s == id);
    }
    ViewBag.selectList = selectList;
    return Content("OK");
}
视图:

在my FirstController.cs中,查看包列表。选择列表=选择列表;正确创建,但如果我将这些字符串列表传递给SecondController.cs,而不是返回字符串列表,它会给出“System.Collections.Generic.List1[System.String]

知道我做错了什么吗


谢谢

在您的视图中,隐藏了表单中如何调用SecondController的字符串列表

   @using (Html.BeginForm("Second", "Second", new { returnUrl = ViewBag.returnUrl }))
 {
if (ViewBag.StringList != null)
{
    foreach (string item in ViewBag.StringList)
    {
        @Html.Hidden("StringList", item);
    }

}
  <input type="submit" class="nar-btn nar-form-size75" value="Submit List" />
 }
然后在你的控制器里

    [HttpPost]
    public virtual ActionResult Second(string returnUrl, List<string> StringList)
    {
        // you should be now able to access to your list
        return View();
    }

AddSitesToUser中selectList的参数是字符串,这就是您得到的结果。我尝试传递ListselectList,但仍然存在相同的问题。您无法将集合分配给路由参数。您需要为集合中的每个项目创建输入
   @using (Html.BeginForm("Second", "Second", new { returnUrl = ViewBag.returnUrl }))
 {
if (ViewBag.StringList != null)
{
    foreach (string item in ViewBag.StringList)
    {
        @Html.Hidden("StringList", item);
    }

}
  <input type="submit" class="nar-btn nar-form-size75" value="Submit List" />
 }
    [HttpPost]
    public virtual ActionResult Second(string returnUrl, List<string> StringList)
    {
        // you should be now able to access to your list
        return View();
    }