将集合传递给视图

时间:2015-07-31 14:22:46

标签: c# asp.net-mvc-5

我有多个方法可以返回一个简单的类型(string,..)&amp;返回集合Collection<Tuple<Model_name, string>>

的方法

我最初尝试使用简单的Collection<string>,但是当我使用Tempdata将集合传递给视图时,它无效。

示例:

控制器:

public ActionResult Index()
{
     Collection<string> test_Q_Q = new Collection<string>();
     test_Q_Q.add("abcd");
     test_Q_Q.add("adbc");
     Tempdata["test"] = test_Q_Q;
     return view();
}

查看:

<!--Bla Bla here-->
@foreach (var lst in Tempdata["test"])  //error here
{
      <li>  </li>
}

2 个答案:

答案 0 :(得分:0)

尝试关闭foreach循环测试。

<!--Bla Bla here-->
@foreach (var lst in Tempdata["test"] )   //  Close 
{
      <li> ???? </li>
}

答案 1 :(得分:0)

真正的问题是TempData是一个愚蠢的字典,并且不知道存在于其数据中的IEnumerable。如果你真的想坚持这种方法,只需将TempData转换为适当的类型,如下所示:

@foreach (var lst in (Collection<string>) TempData["test"])
{
    <li> @lst </li>
}

话虽如此,我认为你不应该使用TempData。我建议使用一个强类型的Model对象,它被传递到视图中,在控制器中就像这样:

var model = new MyCustomType();
model.ListOfStrings = new Collection<string>();
model.ListOfStrings.Add("foo");
model.ListOfStrings.Add("blah"); // You get the idea
return View(model);

然后,在您的视图中,在顶部声明类似的类型:

@model MyCustomType

并按照以下方式解决:

@foreach (var item in Model.ListOfStrings)
{
    <li> @item </li>
}

至少,我希望您使用ViewBag而不是TempData。正如一些评论所提到的,TempData具有特殊用途,与HTTP请求的生命周期有关,并不意味着以您使用它的方式使用。祝你好运!