razor - SelectListItem 显示类的名称而不是文本字段
问题描述
我正在使用 SelectItems 创建一个 SelectList。Text 字段正在进入页面,但 Text 属性没有被 Text 填充,而是使用类名,我不知道我可能做错了什么。
我发现有一种情况,标签 () 不应该单独关闭,而是 />。这使选择列表为空。
这是控制器中的代码(正如我所说的,当我调试时,值确实会传递到页面)
var vitualOfficeManagerViewModel = new VirtualOfficeManagerViewModel();
var enumForSelectList = _context.BusinessType.AsEnumerable().Select(b = >new {
b.Name,
b.Id
});
var initalizeSelectListToAddTo = new List < SelectListItem > ();
foreach(var item in enumForSelectList) {
var x = new SelectListItem(item.Name.ToString(), item.Id.ToString());
initalizeSelectListToAddTo.Add(x);
}
vitualOfficeManagerViewModel.BusinessTypesSelect = new SelectList(initalizeSelectListToAddTo);
//var testt = new SelectList()
return View(vitualOfficeManagerViewModel);
这是我在cshtml中的代码
<div class="form-group">
<select asp-for="BusinessTypes"
asp-items="Model.BusinessTypesSelect">
</select>
</div>
我希望列表具有 Text 属性的值,例如“计算机编程”
但结果是“Microsoft.AspNetCore.Mvc.Rendering.SelectListItem”
解决方案
您需要为其添加前缀@
:
asp-items="@Model.BusinessTypesSelect">
这将取消引用它,传入实际值,而不是属性本身。
此外,FWIW,您正在对数据进行很多无用的更改。您的整个行动可以浓缩为:
var vitualOfficeManagerViewModel = new VirtualOfficeManagerViewModel
{
BusinessTypesSelect = _context.BusinessType.Select(b => new SelectListItem
{
Value = b.Id.ToString(),
Text = b.Name
})
};
return View(vitualOfficeManagerViewModel);
您需要将类型更改为BusinessTypesSelect
toIEnumerable<SelectListItem>
而不是SelectList
,这很好。你不需要一个SelectList
,只需要一个IEnumerable<SelectListItem>
。Razor 只是要使用SelectList
你现在传递的内容来获取Items
它的集合,无论如何,然后创建它自己的。
推荐阅读
- c# - 如何在任何服务器或在线位置记录异常
- apache-spark - 加载主数据文件以激发生态系统
- laravel - 获取关系列时,laravel admin 中的可排序功能不起作用
- python - 2个时间序列之间的差异窗口
- c# - 运行时库错误 - C# Windows 窗体应用程序
- javascript - Angular 使用 find 方法将数据传递给后端服务
- delphi - 如何避免 tmaskedit 中的空格?
- vue.js - Vuex:具有动态键的最佳实践计算对象
- html - 以 json 为默认值的反应式表单控件
- css - ReactJS 将所有 CSS url 图像内联到数据 uri