首页 新闻 会员 周边

使用ADO.NET+MVC5写项目遇到递归使用问题

0
悬赏园豆:20 [已解决问题] 解决于 2014-11-05 08:20

使用传统的三层架构,其中显示层使用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来做这一功能?

DZCMS的主页 DZCMS | 初学一级 | 园豆:5
提问于:2014-11-03 22:35
< >
分享
最佳答案
0

把UI放在VIEW中(table view 或 ul view),通过RenderPartial或Partial来显示VIEW。

RenderPartial或Partial 本身帮不了解决这问题,它们只是负责装载哪个VIEW,而VIEW用什么形式,就不是它们能决定的

收获园豆:20
Yu | 专家六级 |园豆:12980 | 2014-11-04 10:29

我最终修改了一下,用一个PartialViewResult ,在分部视图中再用RenderPartial调用自己

DZCMS | 园豆:5 (初学一级) | 2014-11-05 08:19
其他回答(2)
0

将拼接字符串的代码拆开,分为PartialView和数据

jello chen | 园豆:7306 (大侠五级) | 2014-11-04 09:33
0

可以考虑使用Jquery Ztree组件,一次性将数据取出,由Ztree去展示数据,当然也可以参照Ztree自己写一个组件

秋壶冰月 | 园豆:5903 (大侠五级) | 2014-11-04 11:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册