在视图上显示不需要的代码

时间:2018-08-10 08:27:55

标签: c# asp.net-mvc

我正在从ViewController传递一个简单列表。

控制器代码:

public ActionResult GetRoles(string UserName)
    {
        if (!string.IsNullOrWhiteSpace(UserName))
        {
            IdentityUser user = db.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));

            ViewBag.RolesForThisUser = manager.GetRoles(user.Id);

            // prepopulat roles for the view dropdown
            var list = db.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
            ViewBag.Roles = list;
        }

        return View("ManageUserRoles");
    }

View代码是:

@using (Html.BeginForm("GetRoles", "Roles"))
{
    @Html.AntiForgeryToken()
    <p>
        Username : @Html.TextBox("UserName")
        <input type="submit" value="Get Roles for this User" />
    </p>
    if (ViewBag.Roles != null)
    {
        <p>
            @foreach (var item in ViewBag.Roles)
            {
                @item;
            }
        </p>
    }
}

一切都按计划运行,但是在浏览器中,我看到了这个不需要的代码:

System.Web.Mvc.SelectListItemSystem.Web.Mvc.SelectListItem

任何人都可以帮助我删除它。提前致谢。

3 个答案:

答案 0 :(得分:3)

@item的类型为SelectListItem,并且没有很好的ToString重载。因此,它继承了object的默认行为,并且默认行为是返回完整的类型名称。那就是你得到的。

虽然生成SelectListItem然后不将其用于任何选择有点奇怪,但是解决当前问题的最简单方法是输出文本:

@item.Text

同样,请确保您在做正确的事。如果您只输出SelectListItem的文字,您真的需要吗?

答案 1 :(得分:1)

对我来说还不太清楚,因为您使用了大量的var而不是普通类型,但这是这样的:

    <p>
        @foreach (var item in ViewBag.Roles)
        {
            <span>@item.Text</span>
        }
    </p>

答案 2 :(得分:0)

使用SelectListItemDropDownList / DropDownListFor绑定之外的视图中显示是毫无意义的。您只需将Roles列表直接存储到ViewBag即可:

ViewBag.Roles = db.Roles.OrderBy(r => r.Name).ToList();

然后在视图内部通过foreach循环传递name属性:

if (ViewBag.Roles != null)
{
    <p>
        @foreach (var item in ViewBag.Roles)
        {
            @item.Name
        }
    </p>
}

如果您真的想将其绑定到DropDownList / DropDownListFor中,则可以使用以下内容:

@Html.DropDownList("Name", ViewBag.Roles as List<SelectListItem>, ...)

@Html.DropDownListFor(model => model.Name, ViewBag.Roles as List<SelectListItem>, ...)