无法将类型'char'转换为'string

时间:2018-09-17 00:09:36

标签: asp.net-mvc string

我在一个项目中遇到此错误,并且代码在另一个项目上运行良好。我已经尝试过多次复制原样的代码。有没有办法找出错误的来源?

@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>

1 个答案:

答案 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>
}