c# - 视图上显示不需要的代码
问题描述
我将一个简单的列表传递给 a View
from a Controller
。
控制器代码:
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
谁能帮我删除它。提前致谢。
解决方案
@item
是 type SelectListItem
,并且它没有任何好的ToString
重载。所以它继承了默认行为object
,默认行为是返回完整的类型名称。这就是你得到的。
虽然生成 SelectListItem 然后不将其用于任何类型的选择有点奇怪,但解决当前问题的最简单方法是输出文本:
@item.Text
再次,确保你在做正确的事。SelectListItem
如果你输出的只是它的文本,你真的需要一个吗?
推荐阅读
- java - Spring Boot ConnectException 没有被捕获
- postgresql - 使用 Terraform 进行 AWS RDS IAM 身份验证
- css - SVG 图像未与周围元素对齐/像素完美(尤其是动画时不和谐!)
- html - 如何将图像的高度等距扩展到其全宽容器之外?
- node.js - 执行文件后在 CLI 上继续
- c# - 如何将 SQL 中的数据保存在列表中,然后仅使用 C# 而不使用 LINQ 找到最大值
- c++ - 如何设置我的解码函数以接收编码字符串?
- html5-canvas - Fabric js悬停不起作用
- visual-studio - 在 Visual Studio 2017 中保留“Docker Compose”设置
- ssas - 使用 MDX 查询从日期范围中获取特定日期的时间表