使用模型创建下拉列表

时间:2014-03-18 16:47:49

标签: c# asp.net-mvc linq entity-framework

Asp.net MVC 4
Entity Framework 5
LINQ
C#

我已经使用了ViewModel。我现在将我的PermissionType模型添加到我的ViewModel。

此模型表示数据库中具有相同名称的表。

如何将此表格变为@Html.DropDownListFor()

从'text'表中我需要来自数据库的'name'。 从'值'表中我需要数据库中的'ID'。

如何将该模型从我的控制器转换为可用的下拉列表到我的页面?

ForumBoard model = new ForumBoard();

model.TPGForumQuery = db.TPGForums;
model.ProPit_User = db.ProPit_User.Where(m => m.username == userName).FirstOrDefault();
model.TPGForumTopicQuery = db.TPGForumTopics;
// need help here
model.PermissionType = // a list of all of the permission in this table

编辑:

public class ForumBoard
    {
        public ForumBoard()
        {
            this.ProPit_User = new ProPit_User();
            this.TPGForum = new TPGForum();
            this.PermissionType = new List<ListItem>();
        }

        List<ListItem> PermissionType { get; set; }

        public virtual IEnumerable<TPGForum> TPGForumQuery { get; set; }
        public virtual ProPit_User ProPit_User { get; set; }
        public virtual IEnumerable<TPGForumTopic> TPGForumTopicQuery { get; set; }
        public virtual TPGForum TPGForum { get; set; }
    }

2 个答案:

答案 0 :(得分:1)

首先,更改您的视图模型

class ForumBoard
{
    ...
    public IEnumerable<ListItem> PermissionType {get; set;}
    ...
}

然后,分配

ForumBoard model = new ForumBoard();
...
model.PermissionType = db.PermissionType
                         .Select(p=> 
                          new ListItem (){ Text = p.FieldForText, 
                                           Value= p.FieldForValue });

编辑:如果你的字段是非字符串类型,不幸的是,你必须先调用ToList()方法。

model.PermissionType = db.PermissionType
                    //.Select(p => new {Text = p.TextField, Value = p.permissionID })
                    .ToList()
                    .Select(p=>  new ListItem (){ 
                                              Text = p.Text.ToString(), 
                                              Value= p.Value.ToString()});

答案 1 :(得分:0)

You can try this method :

//Controller : 

    using(MyContext context = new MyContext() )
    {
       IEnumerable<SelectListItem> listItems = context.PermissionType.Select( p => new SelectListItem{ Text = p.FieldNameFor , Value = p.FieldNameFor });

       ViewBag.myList = listItems;

   }



/*
      Do other stuffs here and then return to View()
*/


// In your view :

@{
     IIEnumerable<SelectListItem> listItems = (IEnumerable<SelectListItem>)ViewBag.myList;
 }



  @Html.DropDownListFor("Name of DropDownList" , listItems )