Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.Net Core SelectList未显示所选项目_Asp.net Core_Model View Controller_Selectlist_Selectlistitem - Fatal编程技术网

Asp.net core ASP.Net Core SelectList未显示所选项目

Asp.net core ASP.Net Core SelectList未显示所选项目,asp.net-core,model-view-controller,selectlist,selectlistitem,Asp.net Core,Model View Controller,Selectlist,Selectlistitem,在VS 2017(MVC)中使用ASP.Net core 2.2: 我有一个基于向导的屏幕,其中有一个组织的下拉列表。 当我从数据库加载记录时,我想将选择列表设置为数据库中的值 扰流板警告:初始显示页面时未选择指定项目 当手动选择项目时,单击“下一步”按钮,然后单击“上一步”按钮,将我们返回到第一页,项目将按照我的意愿被选择 在控制器中加载模型以进行第一次显示时,以下方法均未设置所选项目(“0403”)的“选定”属性 方法2中的compare从未计算为true,即使在调试时我可以看到比较的值相等

在VS 2017(MVC)中使用ASP.Net core 2.2:

我有一个基于向导的屏幕,其中有一个组织的下拉列表。 当我从数据库加载记录时,我想将选择列表设置为数据库中的值

扰流板警告:初始显示页面时未选择指定项目

当手动选择项目时,单击“下一步”按钮,然后单击“上一步”按钮,将我们返回到第一页,项目将按照我的意愿被选择

在控制器中加载模型以进行第一次显示时,以下方法均未设置所选项目(“0403”)的“选定”属性

方法2中的compare从未计算为true,即使在调试时我可以看到比较的值相等

方法3找不到该项,即使我可以在调试时看到比较的值相等

方法4找不到该项,即使我可以在调试时看到比较的值相等

这一切都发生在控制器中,因此请不要建议更改视图中下拉列表的名称

**组织表

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;
以下是我尝试在控制器中构建选择列表的各种方法:

1)

2)

4)


好吧,假设selectedOrg type是数字,那么应该按照OrgID格式将其转换为格式化字符串:

var formattedSelectedOrg = String.Format("{0:0000}", selectedOrg);

因此,当应用于您的代码时,它将具有可比性:

// assume selectedOrg is base numeric type
Selected = item.OrgID == selectedOrg.ToString("0000")

Or

// if selectedOrg is String type (nullable)
Selected = item.OrgID == selectedOrg?.Trim().PadLeft(4, '0')

Or

// if you prefer to use predefined formatted string
Selected = item.OrgID == formattedSelectedOrg

看看这个:

还有这个重要的公文包:


希望这能有所帮助。享受你的编码

您确定源查询没有返回IQueryable吗?你试过添加.ToList()然后测试你的代码吗?我试过你的建议。因为当我返回页面时,同样的例行程序也会起作用,所以我没有期望成功,也没有体验到成功。虽然学校列表始终来自数据库(并且以其他方式正确呈现),但当列表设置正确时(单击向导上下文中的“Prev”按钮),所选值来自HttpContext.Session,而不是数据库,我并不倾向于认为价值的直接来源是相关的。谢谢你的反馈。虽然ID标识符看起来像数字,但它们在SQL Server DB中定义为varchar,并在调试时以前导零和引号显示在任何地方。我在早些时候将nvarchar更改为varchar ro帐户,用于字符宽度/大小,但没有效果。欢迎您随时光临。嗯,格式化字符串varchar没有问题。因为您可以使用字符串中的PadLeft()方法。我会修改我的答案,请尽快查看。
        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);
        }
  SelectList oList =
           new SelectList(_context.Org.OrderBy(r => r.OrgID), 
         _context.Org.SingleOrDefault(s => s.OrgID == (string)selectedOrg))
var formattedSelectedOrg = String.Format("{0:0000}", selectedOrg);
// if selectedOrg is nullable numeric type
var formattedSelectedOrg = selectedOrg?.ToString("0000");

// if selectedOrg is base numeric type
var formattedSelectedOrg = selectedOrg.ToString("0000");

// if selectedOrg is String type (nullable)
var formattedSelectedOrg = selectedOrg?.Trim().PadLeft(4, '0');

Or

var number;
var formattedSelectedOrg =
    String.Format("{0:0000}", Int32.TryParse(selectedOrg?.Trim(), out number) ? number : 0);
// assume selectedOrg is base numeric type
Selected = item.OrgID == selectedOrg.ToString("0000")

Or

// if selectedOrg is String type (nullable)
Selected = item.OrgID == selectedOrg?.Trim().PadLeft(4, '0')

Or

// if you prefer to use predefined formatted string
Selected = item.OrgID == formattedSelectedOrg
// assume selectedOrg is base numeric type
s => s.OrgID == selectedOrg.ToString("0000")

Or

// if selectedOrg is String type (nullable)
s => s.OrgID == selectedOrg?.Trim().PadLeft(4, '0')

Or

// if you prefer to use predefined formatted string
s => s.OrgID == formattedSelectedOrg