2017-06-04 40 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