如下表:
信息表
id     name upid
1 新闻 null
2 娱乐 null
3 视频 1
4 图片 1
5 评论 1
6 明星 2
7 电影 2

解决方案 »

  1.   

    @Html.DropDownListFor(model=> ....,数据源)这个数据源可以用 ViewBag 从后面传过来,但是要是 SelectListItem  
      

  2.   

    可以参考 Asp.net MVC在视图中使用递归
    http://blog.csdn.net/wangxiaotao361523/article/details/5485999
      

  3.   


    //在Model层或者业务处理里面
    public List<SelectListItem> getTypeData()
            {
                //创建新元素
                List<SelectListItem> P_Item = new List<SelectListItem>();            //设置默认数据
                P_Item.Add(new SelectListItem() { Text = "请选择分类", Value = "0", Selected = true });            //数据表数据筛选 并转化为list对象
                List<Yr_InfoType> P_Table = DbQuery.OrderBy(m => m.Yr_InfoType_ID).ToList();            //数据循环
                foreach (var P_ItemData in P_Table.Where(m=>m.Yr_InfoType_UpID==null))
                {
                    //数据元素填充
                    P_Item.Add(new SelectListItem() { Text = "--"+P_ItemData.Yr_InfoType_Name, Value = P_ItemData.Yr_InfoType_ID.ToString() });                //子类绑定
                    List<SelectListItem> ChildList = getChildTypeList(P_ItemData.Yr_InfoType_ID, P_Table);                //循环
                    foreach (var C_Item in ChildList)
                    {
                        P_Item.Add(new SelectListItem() { Text = "---->" + C_Item.Text, Value = C_Item.Value });
                    }
                }
                return P_Item;
            }        /// <summary>
            /// 递归绑定数据
            /// </summary>
            /// <param name="FID">父级ID</param>
            /// <param name="objtabList">数据表对象</param>
            public List<SelectListItem> getChildTypeList(int FID, List<Yr_InfoType> list)
            {
                //创建新元素
                List<SelectListItem> C_Item = new List<SelectListItem>();            //数据表数据筛选 并转化为list对象
                List<Yr_InfoType> C_Table = list.Where(m => m.Yr_InfoType_UpID == FID).OrderBy(m => m.Yr_InfoType_ID).ToList();            //数据循环
                foreach (var item in C_Table)
                {
                    //数据元素填充
                    C_Item.Add(new SelectListItem() { Text = item.Yr_InfoType_Name, Value = item.Yr_InfoType_ID.ToString() });                //递归绑定
                    C_Item.AddRange(getChildTypeList(item.Yr_InfoType_ID, list));
                }            return C_Item;
            }
    控制器里面定义一个ViewBag:
    protected override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                ViewBag.Info = Info.getTypeData();
                base.OnActionExecuted(filterContext);        }在视图页面获取ViewBag:
    @Html.DropDownListFor(m => m.Yr_InfoType_UpID, new List<SelectListItem>(ViewBag.Info))
      

  4.   

    //在Model层或者业务处理里面
    public List<SelectListItem> getTypeData()
            {
                //创建新元素
                List<SelectListItem> P_Item = new List<SelectListItem>();            //设置默认数据
                P_Item.Add(new SelectListItem() { Text = "请选择分类", Value = "0", Selected = true });            //数据表数据筛选 并转化为list对象
                List<Yr_InfoType> P_Table = DbQuery.OrderBy(m => m.Yr_InfoType_ID).ToList();            //数据循环
                foreach (var P_ItemData in P_Table.Where(m=>m.Yr_InfoType_UpID==null))
                {
                    //数据元素填充
                    P_Item.Add(new SelectListItem() { Text = "--"+P_ItemData.Yr_InfoType_Name, Value = P_ItemData.Yr_InfoType_ID.ToString() });                //子类绑定
                    List<SelectListItem> ChildList = getChildTypeList(P_ItemData.Yr_InfoType_ID, P_Table);                //循环
                    foreach (var C_Item in ChildList)
                    {
                        P_Item.Add(new SelectListItem() { Text = "---->" + C_Item.Text, Value = C_Item.Value });
                    }
                }
                return P_Item;
            }        /// <summary>
            /// 递归绑定数据
            /// </summary>
            /// <param name="FID">父级ID</param>
            /// <param name="objtabList">数据表对象</param>
            public List<SelectListItem> getChildTypeList(int FID, List<Yr_InfoType> list)
            {
                //创建新元素
                List<SelectListItem> C_Item = new List<SelectListItem>();            //数据表数据筛选 并转化为list对象
                List<Yr_InfoType> C_Table = list.Where(m => m.Yr_InfoType_UpID == FID).OrderBy(m => m.Yr_InfoType_ID).ToList();            //数据循环
                foreach (var item in C_Table)
                {
                    //数据元素填充
                    C_Item.Add(new SelectListItem() { Text = item.Yr_InfoType_Name, Value = item.Yr_InfoType_ID.ToString() });                //递归绑定
                    C_Item.AddRange(getChildTypeList(item.Yr_InfoType_ID, list));
                }            return C_Item;
            }
    控制器里面定义一个ViewBag:
    protected override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                ViewBag.Info = Info.getTypeData();
                base.OnActionExecuted(filterContext);        }在视图页面获取ViewBag:
    @Html.DropDownListFor(m => m.Yr_InfoType_UpID, new List<SelectListItem>(ViewBag.Info))