C# ASP.Net MVC项目如何在div中展示数据库文本数据
ASP.NET MVC + EF 实现首页单块内容展示方案
你已经掌握基础EF CRUD逻辑的话,整个实现只需要按下面的步骤走即可,不需要传递列表数据,直接绑定单个实体到视图就能实现非列表的内容渲染:
1. 定义首页内容实体
在Models文件夹下新建对应实体类,映射数据库存储的标题、内容字段:
public class HomeSiteContent { public int Id { get; set; } public string HomeTitle { get; set; } public string HomeBody { get; set; } public DateTime UpdateTime { get; set; } }
2. 接入EF上下文
在项目的EF数据上下文类(一般命名为xxxDbContext)中添加对应DbSet,和你之前做CRUD的实体配置规则完全一致:
public DbSet<HomeSiteContent> HomeSiteContents { get; set; }
执行EF迁移更新数据库后,直接复用已有的CRUD逻辑做后台管理页即可。注意首页内容只需要保留1条记录,后台仅开放编辑入口即可,不需要做新增多条、删除的功能,避免查出多条数据导致展示混乱。
3. 首页控制器查询单条数据
修改Home控制器的Index动作方法,查询单条首页内容传递给视图,不要传List集合类型:
public ActionResult Index() { // 取第一条首页内容,不存在则初始化默认值,避免空引用报错 var homeContent = db.HomeSiteContents.FirstOrDefault() ?? new HomeSiteContent { HomeTitle = "网站默认标题", HomeBody = "网站默认介绍内容" }; return View(homeContent); }
4. 视图层绑定数据渲染到div
在首页Index视图顶部声明绑定的模型类型为单个实体类(不要声明为IEnumerable列表类型),直接在对应div中输出字段值即可:
@model 你的项目命名空间.Models.HomeSiteContent @{ ViewBag.Title = Model.HomeTitle; } <h1>@Model.HomeTitle</h1> <div class="home-content-wrap"> @* 纯文本内容直接输出即可,Razor会自动做XSS转义 *@ @* 如果是富文本编辑器存的HTML内容,替换为@Html.Raw(Model.HomeBody)渲染 *@ @Model.HomeBody </div>
注意事项
- 如果后台用富文本编辑器录入带HTML标签的内容,渲染时必须用
@Html.Raw()方法,否则HTML标签会被当成普通文本直接输出,无法渲染格式 - 首页访问量较高的话,可以给这个查询加5-10分钟的本地缓存,减少不必要的数据库查询压力
- 系统第一次初始化时可以自动插入一条默认的首页内容记录,避免线上环境首次访问出现默认占位内容
内容的提问来源于stack exchange,提问作者Barış Aydoğdu
相关产品推荐
相关产品推荐

