MVC 中 Razor 无限分类的展示

在MVC的Razor视图展示无级分类的办法,在网上看了很多资料,大多搞得很高大上。可能本人水平有限,实在是不会用。

那我就用最简单爆力的办法来做。

Model:

    public class NewsCategory
    {
        [Key]
        public int CategoryId { get; set; }
        public int ParentCategoryId { get; set; }
        [Required]
        [StringLength(50)]
        public string CategoryName { get; set; }
    }

ViewModel

    public class NewsCategoriesViewModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<NewsCategoriesViewModel> children { get; set; }
    }

Controller

递归获取数据,然后返回给视图

 1        abcContext db = newabcContext();
 2         public ActionResult Index()
 3         {
 4             var categoryList = GetCategoryList(0);
 5             return View(categoryList);
 6         }
 7
 8         [NonAction]
 9         public List<NewsCategoriesViewModel> GetCategoryList(int Id)
10         {
11             List<NewsCategoriesViewModel> uvModel = new List<NewsCategoriesViewModel>();
12
13
14             var perentList = db.Set<NewsCategory>().Where(p => p.ParentCategoryId == Id).ToList();
15
16             if (perentList.Count > 0)
17             {
18                 foreach (var item in perentList)
19                 {
20                     NewsCategoriesViewModel userViewModel = new NewsCategoriesViewModel
21                     {
22                         Id = item.CategoryId,
23                         Name = item.CategoryName,
24                         children = new List<NewsCategoriesViewModel>()
25                     };
26                     List<NewsCategoriesViewModel> tempList = GetCategoryList(item.CategoryId);
27                     if (tempList.Count > 0)
28                     {
29                         //这里出错了;
30                         //userViewModel.children.Add(tempList);
31                         userViewModel.children = tempList;
32                     }
33                     uvModel.Add(userViewModel);
34                 }
35             }
36             return uvModel;
37         }
38     }

View

定义一个视图方法,然后递归调用。

@model List<NewsCategoriesViewModel>
@helper DisplayList(List<NewsCategoriesViewModel> model)
        {
            if (model.Count > 0)
            {
                <ul>
                    @foreach (var item in model)
                    {
                        <li>@item.Name</li>
                        if (item.children.Count > 0)
                        {
                            @DisplayList(item.children);
                        }
                    }
                </ul>

            }
        }
        @DisplayList(Model)

打完收功!

时间: 2024-10-31 06:36:27

MVC 中 Razor 无限分类的展示的相关文章

mvc中razor的一个bug

具体东西就不多说了,所有编译,代码都是木有问题的. 结果预览页面的时候竟然告诉我编译错误,尼玛这不科学啊. 来看看错误页面 看着问题大概应该是缺少} ,或者多了个} 倒置的编译错误才对,但是编译生成完全没有问题啊,没办法,既然报这个问题,那肯定是最终合并生成的代码文件存在bug 那到底是哪里出的问题呢,没办法,硬着头皮查吧. 1.显示试着调试运行了一下页面,发现后台完全没问题.return view() 后,就出现了黄页. 那问题应该就是在html页面中了,那就来看看html页面中有些什么吧.

从项目经理的角度看.net的MVC中Razor语法真的很垃圾.

我们知道,Razor语法中我们可以直接使用@if(){}等代码段,这使得.net程序员在写模版时更容易了. 对比如下: 语法名称 Razor 语法 Web Forms 等效语法 代码块(服务端) @{ int x = 123; string y = "test."; } <% int x = 123; string y = "test."; %> 表达式 encode:<p>@model.Message</p> no encode

MVC中Razor视图基本语法(1)

Razor前面,必须要跟前面的有空隙,即空格,之后的必须要连贯,否则加小括号 1,在页面中输出单一变量时,只要在c#语句之前加上@符号即可. 例如 1 <p> 2 现在时刻: @DateTime.Now 3 </p> 2,如果要输出一段含有空白字或者字运算的结果时,必须要在前后加上一个小括号 1 <p> 2 会员名称: @(ViewBag.IsEnabled ?"启用" : "停用") 3 </p> 3, 若要在页面执

php中递归无限分类之-通过子栏目查找父栏目

<?php header("content-type:text/html;charset=utf8"); /*通过子栏目查找父栏目,范围小到范围大*/ $area = array( array('cat_id'=>1,'province'=>'福建省','parent_id'=>0), array('cat_id'=>2,'province'=>'龙岩市','parent_id'=>1), array('cat_id'=>3,'provi

php无限分类

无限分类,是指从一个最高分类开始,每个子分类都可以分出自己的若干个子分类,可以一直分下去,称为无限级分类: 比如一棵树,从一根树干开始,分出多个树枝,而这些树枝又分出其他的分支,理论上是可以无限分裂下去的: 再比如,一个家庭可以有若干个子女,我们把这些子女看做是第一级分类.而这些子女,又会各自组建自己的家庭,当他们有了自己的后代,就是第二级分类,如果每个家庭都有一个以上的子女,理论上是可以无限分裂的: 在php中,无限分类的表现形式如下图所示: 我们同过id和pid两个字段来连接父级分类和子集分

深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现

1.session的注意点:@session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] session_start()前的输出问题:[session信息本身会增加到http头信息,也就是http主体不能在头前]对php.ini中的输出缓存进行配置,out_buffer的配置[注意:开启之后能够保证输出内容在脚本中缓存] [注意](1)脚本中session变量的键只能是字符串类型的[$_SE

2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎

今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率,但是我们可以通过边学边做的方式来实现其开发的.这不仅便于我们日后对系统的管理与维护,而且还给我们带来一个学习的动力与实践的地方. 但我们在创建一个基于MVC框架的项目时,就遇到一些问题了.那就是MVC的视图引擎是有两种的,一种是Razor,会以cshtml后缀的文件作为视图文件:另一种是ASPX,

在非MVC中使用Razor模板引擎

模板引擎介绍 Razor.Nvelocity.Vtemplate,因为Razor在VS中有自动提示,使用方便有效率. 在非MVC中使用Razor模板引擎 借助于开源的RazorEngine,我们可以在非asp.net mvc项目中使用Razor引擎,甚至在控制台.WinForm项目中都可以使用Razor(自己开发代码生成器) 如何使用Razor 环境搭建: 1,添加引用RazorEngine.dll 2,创建cshtml 新建一个html,改名为cshtml.注意:通过 添加--html页再改成

【转载】【MVC 学习 Razor语法】

Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活更简洁.下面通过一些简单示例让大家快速撑握Razor语法的使用. 准备工作 在演示Razor语法的使用之前,我们需要做一些准备工作. 1.打开VS创建一个ASP.NET MVC空项目,很简单,就不具体演示了. 2.添加一个Model.在项目的Models文件夹中添加一个名为Product的类.在这我们把前一篇