2013-03-12 27 views
3

使用MVC3。我已經有一個DropDownList這是從數據庫表填充的MVC3使用值和名稱填充下拉列表

當前僅填充Units.Name,但我想用它的Unit.Id(它將隱藏在dropdownlist中)填充它以便在用戶選擇某個項目時獲取該ID並在它們使用時點擊創建按鈕(POST方法)。

我需要修改哪些內容才能使其以這種方式工作?

我知道這是微不足道的,但我是MVC的新手。我嘗試了許多沒有成功的可能性。

控制器...

public ActionResult Create() 
{ 

private BridgeEntities db = new BridgeEntities(); 


    var query = (from units in db.Units 
       select units).ToList().OrderBy(q => q.Name); 

    List<string> listOfUnits = new List<string>(); 
    foreach (var item in query) 
    { 
     listOfUnits.Add(item.Name); 
    } 
    ViewBag.ListOfUnits = listOfUnits; 


    return View(); 
} 

在創建視圖...

@Html.DropDownList("Unit",new SelectList(ViewBag.ListOfUnits)) 

我事先創建按鈕...

<button type="submit" class = "btn btn-success"> 
    <i class="icon-plus icon-white"></i> Create 
</button> 

謝謝!

回答

3
ViewBag.ListOfUnits = new SelectList(db.Units.OrderBy(q => q.Name).ToList(), 
             "Id", 
             "Name"); 

更新:

關閉我的頭頂:

// Select Ids to exclude from list 
IQueryable<int> exclude = db.DeprecatedUnits.Select(p => p.UnitID); 

// Select units for selectlist, ignore the ids which are in exclude list 
var units = db.Units.Where(q => !exclude.Contains(q.Id)).OrderBy(q => q.Name).ToList(); 

// Create the selectlist 
ViewBag.ListOfUnits = new SelectList(units,"Id","Name"); 
+0

+1。比我的好... – 2013-03-12 09:59:29

+0

它的作品就像一個魅力!非常感謝! – equisde 2013-03-12 10:14:18

+0

排除未包含在另一個表(例如DeprecatedUnits)中並被外鍵引用的單元的語法是什麼?例如:我想顯示UnitID不在其中的UnitID的所有Unit.Name DeprecatedUnits – equisde 2013-03-12 11:44:17

1
ViewBag.ListOfUnits = (from units in db.Units select units) 
         .ToList().OrderBy(q => q.Name) 
         .Select(s => new SelectListItem 
         { 
          Text = s.Name, 
          Value = s.Id// or s.ID , what property does your model have... 
         }; 
+0

感謝。你的代碼工作正常,但@sormii代碼更清晰 – equisde 2013-03-12 10:15:08

+0

是的,正確的方法是@ sormii's。我以爲非常複雜:) – 2013-03-12 10:16:28