【问题标题】:Access a Viewbag like an Array?像数组一样访问 Viewbag?
【发布时间】:2014-09-24 13:37:51
【问题描述】:
想象一个叫做
的视图包
ViewBag.Modes
这包含以下内容:
Simple
Advanced
Manual
Complete
如何像在数组中一样通过索引访问 viewbag?
例如,Simple 在索引 0 处,那么它看起来像这样
ViewBag.Modes[0]
我尝试了上述方法,但它不起作用......我如何使用 viewbag 复制它或者我可以使用什么解决方法?
【问题讨论】:
标签:
html
asp.net-mvc
razor
viewbag
【解决方案1】:
这对我有用:
控制器:
public ActionResult Index()
{
var stringArray = new string[3] { "Manual", "Semi", "Auto"};
ViewBag.Collection = stringArray;
return View();
}
查看:
@foreach(var str in ViewBag.Collection)
{
@Html.Raw(str); <br/>
}
@for (int i = 0; i <= 2; i++ )
{
@Html.Raw(ViewBag.Collection[i]) <br/>
}
输出:
很抱歉没有使用您的条款。我是从头顶上抓起这个的。
【解决方案2】:
ViewBag 是一个动态属性,它使事情变得有点复杂。
对于您正在寻找的行为,您可能希望改用 ViewData。 ViewData 是一个字典,这意味着您可以使用 Linq 访问每个索引的值:
this.ViewData.Keys.ElementAt(0);
【解决方案3】:
在您的控制器中:
string[] Modes = {"Simple", "Advanced", "Manual", "Complete" };
ViewData["Modes"] = Modes;
在你看来:
<div>
@(((string[])ViewData["Modes"])[0])
</div>
<div>
@(((string[])ViewData["Modes"])[1])
</div>
<div>
@(((string[])ViewData["Modes"])[2])
</div>
【解决方案4】:
使用 ViewBag:
控制器
public ActionResult Index()
{
List<string> modes = new List<string>();
modes.Add("Simple");
modes.Add("Advanced");
modes.Add("Manual");
modes.Add("Complete");
ViewBag["Modes"] = modes;
return View();
}
查看
<h1>List of Modes</h1>
@{foreach (var mode in ViewBag.Modes) {
<li>
@hobby
</li>
} }
----------------------------------------------- -----------------
使用 ViewData:
控制器
public ActionResult Index()
{
string[] Modes = {"Simple", "Advanced", "Manual", "Complete" };
ViewData["Modes"] = Modes;
return View();
}
**查看
<h1>List of Modes</h1>
@foreach (string mode in ViewData["Modes"] as string[]) {
<li>
@mode
</li>
}
【解决方案5】:
感谢您的帖子,但在写完这篇文章后不久,我想出了这个使用模型和列表的解决方案,如下所示,这也可以使用 viewbag 而不是模型来完成。
List<string> list = new List<string>();
foreach (Models.AppModeInfo blah in Model.theAppModes)
{
list.Add(blah.Name);
}
var AppModeText = "";
switch (item.AppModeId)
{
case 1:
AppModeText = list[0];
break;
case 2:
AppModeText = list[1];
break;
case 3:
AppModeText = list[2];
break;
case 4:
AppModeText = list[3];
break;
case 5:
AppModeText = list[4];
break;
}