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

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

Model:

    public class NewsCategory
{
[Key]
public int CategoryId { get; set; }
public int ParentCategoryId { get; set; }
[Required]
[StringLength()]
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

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

        abcContext db = newabcContext();
public ActionResult Index()
{
var categoryList = GetCategoryList();
return View(categoryList);
} [NonAction]
public List<NewsCategoriesViewModel> GetCategoryList(int Id)
{
List<NewsCategoriesViewModel> uvModel = new List<NewsCategoriesViewModel>(); var perentList = db.Set<NewsCategory>().Where(p => p.ParentCategoryId == Id).ToList(); if (perentList.Count > )
{
foreach (var item in perentList)
{
NewsCategoriesViewModel userViewModel = new NewsCategoriesViewModel
{
Id = item.CategoryId,
Name = item.CategoryName,
children = new List<NewsCategoriesViewModel>()
};
List<NewsCategoriesViewModel> tempList = GetCategoryList(item.CategoryId);
if (tempList.Count > )
{
//这里出错了;
//userViewModel.children.Add(tempList);
userViewModel.children = tempList;
}
uvModel.Add(userViewModel);
}
}
return uvModel;
}
}

View

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

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

打完收功!

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

  1. MVC中Razor的使用 及路径问题

    语法: @ 可以编写一条C#语句@{} 可以编写一组C#语句@: 将文字内容直接输出到页面上去@() 在一句中将一段C#代码包括起来,证明这一句完整的C#代码 引用命名空间:@using 空间名称 H ...

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

    我们知道,Razor语法中我们可以直接使用@if(){}等代码段,这使得.net程序员在写模版时更容易了. 对比如下: 语法名称 Razor 语法 Web Forms 等效语法 代码块(服务端) @{ ...

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

    Razor前面,必须要跟前面的有空隙,即空格(多谢一楼提醒,url里面确实不用空格,如果要在url里面只需要@(ViewBag.),加上括号就好了),之后的必须要连贯,否则加小括号 1,在页面中输出单 ...

  4. mvc中razor的一个bug

    具体东西就不多说了,所有编译,代码都是木有问题的. 结果预览页面的时候竟然告诉我编译错误,尼玛这不科学啊. 来看看错误页面 看着问题大概应该是缺少} ,或者多了个} 倒置的编译错误才对,但是编译生成完 ...

  5. MVC 中 Razor引擎学习:RenderBody,RenderPage和RenderSection

    RenderBody 在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到 标签里有这样一条语句: @Rend ...

  6. ASP.NET Core 5.0 MVC中的视图分类——布局视图、启动视图、具体视图、分部视图

    一.创建MVC应用程序 创建后的项目 二.(全局性)启动视图 _ViewStart.cshtml 顾名思义,就是在View开始执行之前执行,而且是每一个View, 它的预设内容是 @{ Layout ...

  7. MVC中在RAZOR 模板里突然了现了 CANNOT RESOLVE SYMBOL ‘VIEWBAG’ 的错误提示

    然后在Razor中出现了@ViewBag的不可用,@Url不可用,@Html 这些变量都不能用了. 异常提示: 编译器错误消息: CS0426: 类型“XX.Model.System”中不存在类型名称 ...

  8. ASP.NET Core 5.0 MVC中的 Razor 页面 介绍

    Razor 是一个用于将基于服务器的代码嵌入到网页中的标记语法. Razor语法由 Razor 标记.c # 和 HTML 组成. 通常包含 Razor 的文件的扩展名 cshtml Razor 语法 ...

  9. ASP.NET MVC 3: Razor中的@:和语法

    原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...

随机推荐

  1. wpf的datepicker处理

    如果有2个datepicker,控制时间起和止的话,可以把第二个datepicker加一个属性,DisplayDateStart = "{Binding SelectedDate,Eleme ...

  2. public、private、protected 与 默认 等访问修饰符

    1)public(公共的):被public修饰的属性和方法可以被所有类访问. 2)private(私有的):被private修饰的属性和方法只能在改类的内部使用. 3)protected(受保护的): ...

  3. Hive深入浅出

    1.  Hive是什么 1) Hive是什么? 这里引用 Hive wiki 上的介绍: Hive is a data warehouse infrastructure built on top of ...

  4. ORA-08189

    OS: [root@yoon ~]# more /etc/oracle-releaseOracle Linux Server release 5.7 DB: Oracle Database 11g E ...

  5. c/c++常用代码 -- ini文件操作

    #pragma once #include <string> #include <sstream> typedef std::basic_string<TCHAR> ...

  6. < java.util >-- Iterator接口

    每一个集合都有自己的数据结构,都有特定的取出自己内部元素的方式.为了便于操作所有的容器,取出元素.将容器内部的取出方式按照一个统一的规则向外提供,这个规则就是Iterator接口. 也就说,只要通过该 ...

  7. [网络配置相关]——ifconfig命令、ip命令、route命令

    ifconfig命令 1. 查看已被激活的网卡的详细信息 # ifconfig eth0 Link encap:Ethernet HWaddr 00:30:67:F2:10:CF inet addr: ...

  8. cocos2dx中的CCLayerColor

    颜色图层在游戏中主要用来烘托背景,可以按照RGB设置填充颜色,同时还可以设置图层的透明度(opacity),常用于显示背景 颜色图层还存在一个特殊的子类:CCLayerGradient,是具有颜色渐变 ...

  9. 0x0A和0x0D

    这里主要是在windows下面做的小实验,linux没有试 先贴源码 #include <iostream> #include <string> #include <st ...

  10. Week8 软件规格说明书

    1.概述 本项目组所开发的软件为一个基于Android的手机端的时间管理软件,主要功能为时间管理软件,可以用于管理待办事项,记录一些需要提醒的信息等.有事件提醒.与Google账户同步.课程表等功能. ...