我在一个项目中遇到此错误,并且代码在另一个项目上运行良好。我已经尝试过多次复制原样的代码。有没有办法找出错误的来源?
@if (ViewBag.RolesForThisUser != null)
{
<div style="background-color:lawngreen;">
<table class="table">
<tr>
<th>
@Html.DisplayName("Roles For This User")
</th>
</tr>
<tr>
<td>
@foreach (string s in ViewBag.RolesForThisUser) //this line
{
<li>@s</li>
}
</td>
</tr>
</table>
答案 0 :(得分:1)
我怀疑ViewBag.RolesForThisUser
本身已经包含string
,既不是数组也不是字符串集合(例如string[]
或List<string>
),因此使用了foreach
循环是没有意义的(string
本身包含char[]
数组,这说明了类型转换失败的原因)。您可以简单地显示它而无需使用foreach
:
@if (!string.IsNullOrEmpty(ViewBag.RolesForThisUser))
{
<div style="background-color:lawngreen;">
<table class="table">
<tr>
<th>
@Html.DisplayName("Roles For This User")
</th>
</tr>
<tr>
<td>
@ViewBag.RolesForThisUser
</td>
</tr>
</table>
</div>
}
或通过ViewBag.RolesForThisUser
方法将字符串集合分配给GET
,以便可以使用foreach
循环,如下例所示:
控制器
public ActionResult ActionName()
{
var list = new List<string>();
list.Add("Administrator");
// add other values here
ViewBag.RolesForThisUser = list;
return View();
}
查看
@if (ViewBag.RolesForThisUser != null)
{
<div style="background-color:lawngreen;">
<table class="table">
<tr>
<th>
@Html.DisplayName("Roles For This User")
</th>
</tr>
<tr>
<td>
@foreach (string s in ViewBag.RolesForThisUser)
{
<p>@s</p>
}
</td>
</tr>
</table>
</div>
}