2013-03-12 68 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