ASP.Net Core SelectList不显示所选项目

问题描述 投票:0回答:1

在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))
asp.net-core model-view-controller selectlist selectlistitem
1个回答
0
投票

嗯,假设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

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.