使用传统的三层架构,其中显示层使用MVC5,但没有使用MVC5中的Models。
项目结构大致如下:
然后有一个分类,有如下字段:
categoryid,parentid,parentpath,categoryname....level等字段,其中level表示栏目是几级栏目,如顶级目录是1,二级目录是2,三级目录是3 ,这个字段我现在是用来计算树形缩进用的。
在数据层中写好了各种方法
主要的是根据分类Id获取子分类集合 GetList(int categoryid),GetModel(int categoryid)等
我现在做的方法比较死板,不方便修改,我是这样做的:
先写一个递归的方法,拼接成字符串
//递归分类 public string GetCategories(int categoryid) { List<CategoryModel> list = new CategoryBll().GetList(categoryid); StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.Count; i++) { int level = list[i].level; sb.Append("<tr><td style=\"padding-left:" + ((level - 1) * 20) + "px\">"); sb.Append("<img src=\"/static/folder.gif\" />"); sb.Append("<a href=\"/category/" + list[i].categoryindex + "\" target=\"_blank\">" + list[i].categoryname + "</a></td><td width=\"100\" style=\"text-align:right;\">"); sb.Append("<button type=\"button\" value=\"" + list[i].categoryid + "\" class=\"btn btn-default btn-update-category\">编辑</button></td>"); sb.Append("</tr>"); sb.Append(GetCategories(list[i].categoryid)); } return sb.ToString(); }
然后在Action中调用这个方法
public ActionResult category() { ViewBag.cate = GetCategories(0); return View(); }
,再在前台页面调用
@MvcHtmlString.Create(ViewBag.cate)
这样的做法不方便修改,如上面我是使用table布局,如果我想用ul来展示的话只能修改源码了,这样可用性就不高了。
想咨询下,如何使用分部视图RenderPartial或Partial来做这一功能?
把UI放在VIEW中(table view 或 ul view),通过RenderPartial或Partial来显示VIEW。
RenderPartial或Partial 本身帮不了解决这问题,它们只是负责装载哪个VIEW,而VIEW用什么形式,就不是它们能决定的
我最终修改了一下,用一个PartialViewResult ,在分部视图中再用RenderPartial调用自己
将拼接字符串的代码拆开,分为PartialView和数据
可以考虑使用Jquery Ztree组件,一次性将数据取出,由Ztree去展示数据,当然也可以参照Ztree自己写一个组件