C# mvc5下拉列表中的默认选定值

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

我有一个绑定到@Html.dropdownfor的linq查询。如果我给用户的帐户赋值并离开页面。当我返回到页面时,它的默认值或预选值是“选择一个计划”,即使我以前为它分配了一个值。我需要它预先选择数据库中已经存储的值。这是正确预选的

 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
,因为这是捕获变量的名称。