Asp.net core ASP.Net Core SelectList未显示所选项目
在VS 2017(MVC)中使用ASP.Net core 2.2: 我有一个基于向导的屏幕,其中有一个组织的下拉列表。 当我从数据库加载记录时,我想将选择列表设置为数据库中的值 扰流板警告:初始显示页面时未选择指定项目 当手动选择项目时,单击“下一步”按钮,然后单击“上一步”按钮,将我们返回到第一页,项目将按照我的意愿被选择 在控制器中加载模型以进行第一次显示时,以下方法均未设置所选项目(“0403”)的“选定”属性 方法2中的compare从未计算为true,即使在调试时我可以看到比较的值相等 方法3找不到该项,即使我可以在调试时看到比较的值相等 方法4找不到该项,即使我可以在调试时看到比较的值相等 这一切都发生在控制器中,因此请不要建议更改视图中下拉列表的名称 **组织表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,即使在调试时我可以看到比较的值相等
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