1、数据库设计:
id:int
name:string
pid:int //父级id(顶级菜单默认为0)

上面的适用于操作类别的模块,如果是对操作文章的模块,建议在数据库增加一个字段:(string)cabh,在筛选的时候会非常的方便。
id:int
name:string
pid:int //父级id(顶级菜单默认为0)
2、Controller:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcTest.Models;
namespace MvcTest.Controllers
{
[ValidateInput(false)]
public class HomeController : Controller
{
private testEntities db = new testEntities();
[LoginFilter]
public ActionResult Index()
{
BindDropDownList();
return View();
}
//绑定顶级分类
private void BindDropDownList()
{
List<SelectListItem> select1 = new List<SelectListItem>();
var one = from c in db.Categories where c.pId == 0 select c;
foreach (var b in one)
{
string pname = b.name;
string pid = b.id.ToString();
select1.Add(new SelectListItem
{
Text = "> " + pname,
Value = pid
});
int sonpid = int.Parse(pid);
string blank = " ┠ ";
//递归子分类方法
BindNode(sonpid, blank, select1);
}
ViewBag.caList = new SelectList(select1, "Value", "Text");
}
//绑定子分类
private void BindNode(int sonpid, string blank, List<SelectListItem> select1)
{
var two = db.Categories.Where(c => c.pId == sonpid);
foreach (var c in two)
{
string sname = blank + c.name;
string sid = c.id.ToString();
select1.Add(new SelectListItem
{
Text = sname,
Value = sid
});
int sonpids = int.Parse(sid);
string blank2 = blank + "━";
BindNode(sonpids, blank2, select1);
}
}
}
}
3、view:@Html.DropDownListFor(a => a.pId, ViewBag.caList as IEnumerable<SelectListItem> , new { style = "width: 120px;" })
上面的适用于操作类别的模块,如果是对操作文章的模块,建议在数据库增加一个字段:(string)cabh,在筛选的时候会非常的方便。