【发布时间】:2017-06-04 15:22:36
【问题描述】:
我有一个绑定到 @Html.dropdownfor 的 linq 查询。如果我为用户的帐户分配一个值并离开页面。当我返回页面时,它的默认值或预选值是“选择一个时间表”,即使我之前分配了一个值。我需要它来预选已经存储在数据库中的值。它是用这个正确预选的
ScheduleBuilderList = _context.ScheduleBuilder.ToList()
直到我绑定了 LINQ 查询。 如何在不弄乱 LINQ 的情况下将数据库值设置为下拉列表中选择的默认值?
@Html.DropDownListFor(m => m.ApplicationUser.ScheduleSum, new SelectList(Model.ScheduleBuilderList, "ScheduleSummary", "ScheduleSummary"), "Choose a schedule", new {@class = "form-control", id="dropdown"})
LINQ
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
完整的 Actionresult 代码以及下面的建议更改
public ActionResult EmployeeDetails(string id, ScheduleBuilder scheduleBuilder, ApplicationUser applicationUser)
{
var user = _context.Users.SingleOrDefault(e => e.Id == id);
if (user == null)
{
return HttpNotFound();
}
var viewModel = new TierViewModel()
{
ApplicationUser = user,
TierLevel = _context.Tier.ToList(),
ScheduleBuilderList = _context.ScheduleBuilder
.Where(s => s.IsScheduleAssigned == false)
.Select(item => new SelectListItem
{
Text = item.ScheduleSummary,
Value = item.ScheduleSummary,
Selected = item.ScheduleSummary == user.ScheduleSum
})
};
var user1 = _context.Users.ToList();
var schedule1 = _context.ScheduleBuilder.ToList();
return View("EmployeeDetails", viewModel);
}
【问题讨论】:
-
您的新 linq 查询正在过滤存储在数据库中的值。您可能想要 .Where(s => s.IsScheduleAssigned == false || s == currStoredSchedule)。这只是伪代码,因为我们不知道您的 ScheduleBuilderList 长什么样..
-
当您使用
DropDownListFor()绑定到模型属性时,将忽略设置SelectListItem的Selected值。删除Selected = item.ScheduleSummary == user.ScheduleSum行 - 毫无意义。
标签: c# .net asp.net-mvc linq