2014-10-01 78 views
-1

在我看來,我有:ViewBag的SelectList不設置選定值

<tr class="form-group"> 
    <th><label class="control-label">Technician</label></th> 
    <td> 
     @Html.DropDownListFor(model => model.UserID, (IEnumerable<SelectListItem>)ViewBag.TechnicianID) 
     @Html.ValidationMessageFor(model => model.UserID) 
    </td> 
</tr> 

而且在我的控制器:

public ActionResult Edit(int? id) { 
     var salescall = (id != null) ? db.SalesCalls.Find(id) : new SalesCall(); 

     if (salescall == null) { 
      return HttpNotFound(); 
     } 

     ViewBag.CompanyID = new SelectList(db.Companies, "CompanyID", "Name", salescall.CompanyID); 
     var technicians = db.UserProfiles.Select(t => new { 
      ID = t.ID, 
      Name = t.FirstName + " " + t.LastName, 
     }).OrderBy(t => t.Name); 
     var techID = CurrentUser.UserID(User); 
     ViewBag.TechnicianID = new SelectList(technicians, "ID", "Name", techID); 

     return View(salescall); 
    } 

當我調試,該值被傳遞給techID是正確的值,並該值確實存在於下拉菜單中,但出於某種原因,它未被選中。我該如何做這項工作?

+0

確保有在爲'techID'或相應價值的末尾沒有多餘的空間下拉列表中的值。使用'trim()'可以追蹤任何可能存儲在數據庫中的額外字符。 – 2014-10-01 16:13:34

+0

@DennisR傳遞的值是整數類型。另外,當我手動輸入數字而不是通過techID變量傳遞時,它仍然不起作用。例如。 ViewBag.TechnicianID = new SelectList(技術人員,「ID」,「姓名」,38); – mdk09 2014-10-01 16:37:08

+0

好的,你可以註釋掉@@ Html.ValidationMessageFor(model => model.UserID)這行嗎?看看你的原始代碼會發生什麼? – 2014-10-01 16:44:12

回答

0

變化

ID = t.ID, 
new SelectList(technicians, "ID", "Name", techID); 

Id = t.ID, 
new SelectList(technicians, "Id", "Name", techID); 

我的直覺是你在User模型定義Id。它應該有IdName

編輯

如果techID是一個整數,請確保您傳遞一個匿名對象:

new SelectList(technicians, "Id", "Name", new { Id = techID }); 
+0

謝謝,但它沒有解決我的問題。 – mdk09 2014-10-01 15:59:32

+0

我已經更新了我的答案。 – beautifulcoder 2014-10-01 18:33:40

+0

仍似乎沒有辦法。 – mdk09 2014-10-01 19:38:52