C# mvc5下拉列表中的默认选定值
我有一个绑定到@Html.dropdownfor的linq查询。如果我给用户的帐户赋值并离开页面。当我返回到页面时,它的默认值或预选值是“选择一个计划”,即使我以前为它分配了一个值。我需要它预先选择数据库中已经存储的值。这是正确预选的C# mvc5下拉列表中的默认选定值,c#,.net,asp.net-mvc,linq,C#,.net,Asp.net Mvc,Linq,我有一个绑定到@Html.dropdownfor的linq查询。如果我给用户的帐户赋值并离开页面。当我返回到页面时,它的默认值或预选值是“选择一个计划”,即使我以前为它分配了一个值。我需要它预先选择数据库中已经存储的值。这是正确预选的 ScheduleBuilderList = _context.ScheduleBuilder.ToList() ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleA
ScheduleBuilderList = _context.ScheduleBuilder.ToList()
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
直到我绑定了LINQ查询。
我如何在不弄乱LINQ的情况下,将数据库值设置为下拉列表中选择的默认值
@Html.DropDownListFor(m => m.ApplicationUser.ScheduleSum, new SelectList(Model.ScheduleBuilderList, "ScheduleSummary", "ScheduleSummary"), "Choose a schedule", new {@class = "form-control", id="dropdown"})
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
林克
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
完整的Actionresult代码和下面建议的更改
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
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);
}
您可以尝试以下方法:
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
var ScheduleBuilderList = _context.ScheduleBuilder
.Where(s => s.IsScheduleAssigned == false)
.Select(item => new SelectListItem
{
Text = item.ScheduleSummary,
Value = item.ScheduleSummary,
Selected = item.ScheduleSummary == "usersvalue"
});
其中,应将文字“usersvalue”替换为您感兴趣的ApplicationUser.ScheduleSum
的值。然后你也应该改变一下你的观点,如下所示:
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
@Html.DropDownListFor(m => m.ApplicationUser.ScheduleSum,
Model.ScheduleBuilderList,
"Choose a schedule",
new {@class = "form-control", id="dropdown"})
您的模型应将ScheduleBuilderList的类型替换为以下类型:
ScheduleBuilderList = _context.ScheduleBuilder.Where(s => s.IsScheduleAssigned == false).ToList()
IEnumerable<SelectListItem>
IEnumerable
新的linq查询正在筛选存储在数据库中的值。您可能需要.Where(s=>s.isschedulesigned==false | | s==currStoredSchedule)。这只是伪代码,因为我们不知道ScheduleBuilderList的外观。当您使用DropDownListFor()
绑定到模型属性时,将忽略设置Selected
的Selected
值。删除Selected=item.schedulesummmary==user.ScheduleSum
行-它毫无意义。我认为我不能声明ScheduleBuilderList,因为它在viewmodel中。为了澄清,我在上面发布了完整的ActionResult方法以及您建议的代码截图。“我的视图模型”中的ScheduleBuilderList与public IEnumerable ScheduleBuilderList{get;set;}一样列出,以获取下拉项。@user6680太棒了!您应该在ViewModel定义中将此IEnumerable ScheduleBuilderList{get;set;}
更改为此IEnumerable ScheduleBuilderList{get;set;}
。@user6680在Selected=s.ScheduleSummary==user.ScheduleSum
之后,您还缺少了一个右大括号。您应该在那里添加此}
我修复了该部分,谢谢,但仍有错误。我更新了上面的代码和屏幕截图。我猜第二个截图错误是因为第一个截图错误。“从不使用属性ScheduleBuilderList”是我在viewmodel IEnumerable ScheduleBuilderList{get;set;}@user6680中得到的,我的错…对不起。从代码编辑器中编写代码有点困难:(愚蠢的错误…你应该使用项,而不是s
,因为这是捕获变量的名称。