2017-06-04 119 views
1

我有一个绑定到@ Html.dropdownfor的linq查询。如果我为用户的帐户分配一个值并离开页面。当我回到页面时,即使当我有一个从前分配给它的值时,它的默认值或预选值是“选择时间表”。我需要它预先选择已存储在数据库中的值。这是预选正确与此mvc5下拉列表中的默认选定值

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() 

enter image description here

enter image description here

完整的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); 
} 
+0

你的新的LINQ查询过滤存储在数据库中的值。您可能需要.Where(s => s.IsScheduleAssigned == false || s == currStoredSchedule)。这只是伪代码,因为我们不知道ScheduleBuilderList的外观如何。 – vabii

+0

使用DropDownListFor()绑定到模型属性时,将忽略设置SelectListItem的Selected值。删除'Selected = item.ScheduleSummary == user.ScheduleSum'行 - 它没有意义。 –

回答

1

建议的改变你可以尝试这样的事情:

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为您感兴趣的值。然后,你应该改了一下还你看来,象下面这样:

@Html.DropDownListFor(m => m.ApplicationUser.ScheduleSum, 
         Model.ScheduleBuilderList, 
         "Choose a schedule", 
         new {@class = "form-control", id="dropdown"}) 

和你的模型应与以下类型取代ScheduleBuilderList类型:

IEnumerable<SelectListItem> 
+0

我不认为我可以声明ScheduleBuilderList,因为它在viewmodel中。为了澄清,我发布了上面的完整ActionResult方法,并附上了你的代码的截图。 ScheduleBuilderList在我的viewModel列出像公共IEnumerable ScheduleBuilderList {get;组; }抓取下拉项。 – user6680

+0

@ user6680太棒了!你应该改变这个'IEnumerable ScheduleBuilderList {get;组; }'这个'IEnumerable ScheduleBuilderList {get;组;在你的ViewModel定义里面。 – Christos

+0

@ user6680在'Selected = s.ScheduleSummary == user.ScheduleSum'之后,您也错过了一个关闭花括号。你应该添加这个'}' – Christos