下拉列表用于根据数据库中的值选择值
本文关键字:选择 数据库 用于 下拉列表 | 更新日期: 2023-09-27 17:57:49
大家好。我有下一个问题。
我有编辑表单,上面有几个下拉列表控件。我需要根据数据库中的数据在 DropDownList 中绑定选定的值。
我接下来是:
型:
供应商
public class Supplier{
public int SupplierID { get; set; }
public string CompanyName { get; set; }
}
德尔维里
public class Delivery{
public int DeliveryID { get; set; }
public string DeliveryCode { get; set; }
public int SupplierID { get; set; }
public virtual Supplier Supplier { get; set; }
}
视图模型交付编辑屏幕:
public class DeliveryEditViewModel{
public int DeliveryID { get; set; }
public string SelectedCompanyName { get; set; }
public IEnumerable<SelectListItem> Suppliers { get; set; }
}
视图:
<dd>
@Html.DropDownListFor(x => x.SelectedCompanyName, new SelectList(Model.Suppliers, "Value", "Text"), htmlAttributes: new { @class = "form-control" })
</dd>
控制器:
// GET: Deliveries/Edit
public ActionResult Edit(int? id){
db.Configuration.ProxyCreationEnabled = false;
DeliveryEditViewModel model = db.Deliveries.Include(s => s.Supplier).Include(a => a.Auction).Include(q => q.Quality).Include(t => t.BulbType)
.Where(d => d.DeliveryID == id)
.Select(x => new DeliveryEditViewModel{
DeliveryID = x.DeliveryID,
SelectedCompanyName = x.Supplier.CompanyName
})
.Single();
model.Suppliers = db.Suppliers.Where(s => s.IsActive == true).Select(x => new SelectListItem{
Value = x.SupplierID.ToString(),
Text = x.CompanyName
});
return View(model);
}
问题是我无法根据数据库中已有的数据在 DropDownList 中设置选定的值。相反,我有一个始终处于活动状态的第一个元素的下拉列表控件。我已经尝试了从 Html.DropdownList 中解决未设置的选定值,但我仍然选择了第一个值而不是实际值。
几个小时的研究和已经大胆的头发让我停下来寻求帮助。请帮助我弄清楚这怎么可能。
非常感谢。
Suppliers
已经IEnumerable<SelectListItem>
为什么在视图中使用new SelectList(Model.Suppliers, "Value", "Text")
创建另一个相同的视图?您需要通过@StephenMuecke设置SelectedCompanyName
的值以匹配其中一个选项(即供应商表中SupplierID
的值之一(但您的代码建议应int
属性而不是string
我建议您不要在控制器级别创建选择列表项。你能做的是:
public class DeliveryEditViewModel
{
public int DeliveryID { get; set; }
public string SelectedCompanyName { get; set; }
public IEnumerable<Supplier> suppliers { get; set; }
}
控制器:
// GET: Deliveries/Edit
public ActionResult Edit(int? id){
db.Configuration.ProxyCreationEnabled = false;
DeliveryEditViewModel model = db.Deliveries.Include(s => s.Supplier).Include(a => a.Auction).Include(q => q.Quality).Include(t => t.BulbType)
.Where(d => d.DeliveryID == id)
.Select(x => new DeliveryEditViewModel{
DeliveryID = x.DeliveryID,
SelectedCompanyName = x.Supplier.CompanyName
})
.Single();
Model.suppliers = db.Suppliers.Where(s => s.IsActive == true);
return View(model);
}
视图:
@Html.DropDownListFor(model => model.SelectedCompanyName, ((IEnumerable<Supplier>)Model.supplierss).Select(x => new SelectListItem()
{
Text = x.CompanyName.ToString(),
Value = x.SupplierID.ToString(),
Selected = (Model != null) && (x.CompanyName == Model.SelectedCompanyName)
}), "-- Select Supplier --")
这是一个非常有用的技巧,您可以更改文本或值或选定值或默认选定选项,而无需在控制器上更改并再次构建它以反映。