在VS 2017(MVC)中使用ASP.Net core 2.2:
我有一个基于向导的屏幕,其中包含组织的下拉列表。从数据库加载记录时,我想将选择列表设置为数据库中的值。
[扰流板警报:最初显示页面时未选择指定的项目。
[手动选择该项目,然后单击“下一步”按钮,然后单击“上一步”按钮,使我们返回到第一页,则按我的意愿选择了该项目。
在将模型加载到控制器中以进行首次显示时,以下方法均未设置所选项目的“ Selected”属性(“ 0403”)。
即使在调试过程中我看到比较的值相等,方法2中的比较也永远不会得出true。
即使在调试时我看到比较值相等,方法3仍未找到项目
即使调试时我看到比较值相等,方法4仍未找到项目
这都是在Controller中发生的,所以请不要建议在View中更改下拉列表的名称。
**组织机构表
ORG ID OrgName**
0004 Org 4
0007 Org 7
0008 Org 8
0403 Org 403
这是我的源查询:
var orgsQuery = from s in _context.Orgs
orderby s.OrgID
select s;
这些是我尝试在Controller中构建选择列表的各种方法:
1)。
SelectList oList = new SelectList(orgsQuery.AsNoTracking(), "OrgID", "OrgName", selectedOrg);
2)。
List<SelectListItem> oList = new List<SelectListItem>();
foreach ( var item in OrgsQuery)
{
oList.Add(new SelectListItem()
{
Text = item.OrgName,
Value = item.OrgID,
Selected = (item.OrgID == (string)selectedOrg ? true : false)
});
}
3)。
if (selectedOrg != null)
{
oList = new SelectList(OrgsQuery.AsNoTracking(),"OrgID", "OrgName", OrgsQuery.First(s =>
s.OrgID == (string)selectedOrg));
}
else
{
oList = new SelectList(OrgsQuery.AsNoTracking(), "OrgID", "OrgName", selectedOrg);
}
4)。
SelectList oList =
new SelectList(_context.Org.OrderBy(r => r.OrgID),
_context.Org.SingleOrDefault(s => s.OrgID == (string)selectedOrg))
嗯,假设selectedOrg type是数字,那么应该按照OrgID格式将其转换为格式化的字符串:
var formattedSelectedOrg = String.Format("{0:0000}", selectedOrg);
或
var formattedSelectedOrg = selectedOrg?.ToString("0000");
因此,当应用于您的代码时,它将具有可比性:
Selected = item.OrgID == selectedOrg?.ToString("0000")
Or
Selected = item.OrgID == formattedSelectedOrg
和
s => s.OrgID == selectedOrg?.ToString("0000")
Or
s => s.OrgID == formattedSelectedOrg
签出:Custom numeric format strings
希望这会有所帮助。