我想不出一种方法来克服这个问题,我试图在下拉列表中选择一个项目,而在下一个项目中只显示与我之前选择的项目相关的项目。
var xyz = ViewBag.ID_Cliente = new SelectList(db.Clientes, "ID", "Num_Cliente");
var results = from e in db.Extintores.AsEnumerable()
where SqlFunctions.StringConvert((double)e.ID_Cliente).Contains(xyz)
select e.Num_Extintor.ToList();
ViewBag.ID_Extintor = new SelectList(results);
有人能帮我吗?
根据您想要的操作,我建议使用流畅的 Linq 语法并根据是否已进行选择来编写查询:
您的“xyz”变量令人困惑,这是什么意思?从您的描述来看,您似乎想要一个客户端列表,然后选择一个客户端 ID 并使用该客户端 ID 来过滤这些 Extintore。
var selectedClientId = ViewBag.SelectedClientId;
var results = db.Extintores;
if (selectedClientId != null)
results = results.Where(x => x.ID_Cliente == selectedClientId);
ViewBag.Id_Extintor = new SelectList(results.Select(x => x.Num_Extintor));
坦率地说ViewBag
,不推荐使用在视图和控制器之间中继状态。ViewBag
是动态的,所以虽然它很灵活,但很难断言请求之间的状态是可靠的。相反,您应该在调用之间利用(视图)模型。我希望尽可能多地保留视图包中变量的数据类型。可用项目(SelectList
)的“列表”可以是SelectList
字符串的一个,但选择一个时,它可以被解析回适当的数据类型,而不是在LINQ查询中投射到字符串。这种转换方法的一个大问题是你放弃了在数据库中使用索引。所以如果你的ViewBag
有一个 ID_Clients 列表,从该列表中选择一个客户端应该标记一个 SelectedClient ID,以便我们可以使用它来过滤下一个级别。如果您想利用多选,那么您需要存储一组 ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句