ASP.NET MVC 使用分部视图制作公共头部,尾部,并通过ViewBag传值
一:新建分部视图

二:布局页_Layout.cshtml上调用
不灵活,不能传递数据,引用静态公共部分
@Html.Partial("_Head")
@Html.Partial("~/Views/Shared/_Head.cshtml")
通过控制器方法引入分部视图,控制器里可以向分部视图传递数据,引用动态公共部分
@Html.Action("Head", "Home")
三:代码展示:
布局页_Layout.cshtml,因为@RenderSection只能放在布局页,所以@Html.Action("Foot", "Home")下面的一坨就没放在_Foot里面,会报错。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title</title>
@Html.Action("Meta", "Home")
<link rel="stylesheet" href="~/Content/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="~/Content/layui/css/layui.css" />
<link rel="stylesheet" href="~/Content/css/master.css" />
<link rel="stylesheet" href="~/Content/css/gloable.css" />
<link rel="stylesheet" href="~/Content/css/nprogress.css" />
@RenderSection("css", required: false)
</head>
<body>
@Html.Action("Head", "Home")
@RenderBody()
@Html.Action("Foot", "Home")
<script src="~/Content/layui/layui.js"></script>
<script src="~/Content/js/yss/gloable.js"></script>
<script src="~/Content/js/plugins/nprogress.js"></script>
<script>NProgress.start();</script>
@RenderSection("js", required: false)
<script>
window.onload = function () {
NProgress.done();
};
</script>
<script>
(function () {
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[];
s.parentNode.insertBefore(bp, s);
})();
</script>
</body>
</html>
我把控制器方法写在了首页,因为博客首页头部尾部不公共的,其实写哪里都一样,返回分部视图就ok。
首页控制器:/Home
返回分部视图千万不要用 return View(model.GetWebSiteInfo()); 会默认找~Views/Home/ 下面的视图,严重错误,IIS Express直接崩掉自动退出
using RightControl.IService;
using RightControl.WebApp.Models;
using System.Web.Mvc; namespace RightControl.WebApp.Controllers
{
public class HomeController : Controller
{
public IArticleService service { get; set; }
WebSiteInfo model = new WebSiteInfo();
// GET: Home
public ActionResult Index()
{
ViewBag.HotArtileList = service.GetHotArticle();
return View(model.GetWebSiteInfo());
}
public ActionResult Meta()
{
ViewBag.Site = model.GetWebSiteInfo();
return PartialView("~/Views/Shared/_Meta.cshtml");
}
public ActionResult Head()
{
ViewBag.Site = model.GetWebSiteInfo();
return PartialView("~/Views/Shared/_Head.cshtml");
}
public ActionResult Foot()
{
ViewBag.Site = model.GetWebSiteInfo();
return PartialView("/Views/Shared/_Foot.cshtml");
}
}
}
_Meta.cshtml
<meta name="keywords" content="@ViewBag.Site.MetaKey" />
<meta name="description" content="@ViewBag.Site.MetaDescribe">
_Head.cshtml
<div class="header">
</div>
<header class="gird-header">
<div class="header-fixed">
<div class="header-inner">
<a href="javascript:void(0)" class="header-logo" id="logo">@ViewBag.Site.SiteName</a>
<nav class="nav" id="nav">
<ul>
<li><a href="/Home">首页</a></li>
<li><a href="/Article">博客</a></li>
<li><a href="/Feedback">留言</a></li>
<li><a href="/Diarys">日记</a></li>
<li><a href="/Links">友链</a></li>
<li><a href="/About">关于</a></li>
</ul>
</nav>
<a href="/User/QQLogin" class="blog-user">
<i class="fa fa-qq"></i>
</a>
<a class="phone-menu">
<i></i>
<i></i>
<i></i>
</a>
</div>
</div>
</header>
_Foot.cshtml
<footer class="grid-footer">
<div class="footer-fixed">
<div class="copyright">
<div class="info">
<div class="contact">
<a href="@ViewBag.Site.Gitee" class="github" target="_blank"><i class="fa fa-github"></i></a>
<a href="https://wpa.qq.com/msgrd?v=3&uin=@ViewBag.Site.QQ&site=qq&menu=yes" class="qq" target="_blank" title="@ViewBag.Site.QQ"><i class="fa fa-qq"></i></a>
<a href="https://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=@ViewBag.Site.Mail" class="email" target="_blank" title="@ViewBag.Site.Mail"><i class="fa fa-envelope"></i></a>
<a href="javascript:void(0)" class="weixin"><i class="fa fa-weixin"></i></a>
</div>
<p class="mt05">
@ViewBag.Site.CopyRight
</p>
</div>
</div>
</div>
</footer>
最终效果:


头部尾部提取公共部分还有一种做法,不用分部视图,直接用布局页:
新建BaseController控制器,里面获取网站头部尾部需要的WebSiteInfo信息,除开博客首页每个页面的控制器都继承它,布局页直接使用BaseController的WebSiteInfo信息,通过ViewBag的方式给布局页头尾赋值。
最后总结,个人还是喜欢用分部视图来抽出头部尾部的,继承BaseController的方法虽然不用新建部分视图,但是也要每个有公共头尾的页面控制器去继承它,想想也有点膈应。
ASP.NET MVC 使用分部视图制作公共头部,尾部,并通过ViewBag传值的更多相关文章
- ASP.NET MVC之分部视图和ChildAction(三)
前言 上节我们已经非常清晰并且明确的讲了@Html.ActionLink的作用,这一节我们开始讲讲分部视图以及孩子Action. 话题 在C#中我们知道继承的目的是为了代码的复用,在Web应用程序同样 ...
- Asp.net Mvc中分部视图获取后台数据并展示
方式一: 1.主页面中代码: @{Html.RenderAction("CreateLeftMenu");} 2.Controller中代码: public PartialView ...
- ASP.NET MVC 中的视图生成
关于 ASP.NET MVC 中的视图生成 在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Mode ...
- ASP.NET MVC 自定义Razor视图WorkContext
概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...
- ASP.NET MVC学习之视图篇(2)
继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...
- MVC小系列(三)【MVC的分部视图】
MVC的分部视图: 分部视图在action中返回一定要用PartialView(),而不要偷懒使用View(),因为如果使用后者,系统会认为是一个标准视图,会为它加个默认的母版页(LayOut),除非 ...
- 4.ASP.NET MVC 5.0 视图之模型绑定
大家好,这篇文章,我将向大家介绍ASP.NET MVC的模型视图绑定,ASP.MVC的模型绑定分为两种:一种是动态绑定[Dynamic Binding];还有一种就是强类型绑定[Strongly ty ...
- ASP.NET MVC扩展自定义视图引擎支持多模板&动态换肤skins机制
ASP.NET mvc的razor视图引擎是一个非常好的.NET MVC框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的项目支 ...
- ASP.NET MVC 扩展自定义视图引擎支持多模板&动态换肤skins机制
ASP.NET mvc的razor视图引擎是一个非常好的.NET MVC 框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的 ...
随机推荐
- 重新渲染layui的radio
修改后添加这一段 layui.use('form', function() { var form = layui.form; form.render(); }); 也可以用官方的方法:https:// ...
- python学习-42 装饰器 --- 函数闭包1
函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson( ...
- ASP.NET Core分布式项目-3.oauth2与open id connect 对比
oauth2 open id connect
- SpringCloud Stream 消息驱动
1.什么是消息驱动 SpringCloud Stream消息驱动可以简化开发人员对消息中间件的使用复杂度,让系统开发人员更多尽力专注与核心业务逻辑的开发.SpringCloud Stream基于Spr ...
- Unity性能优化-对象池
1.对象池Object Pool的原理: 有些GameObject是在游戏中需要频繁生成并销毁的(比如射击游戏中的子弹),以前的常规做法是:Instantiate不断生成预设件Prefab,然后采用碰 ...
- mysql 树结构递归处理
日常开发中我们经常会遇到树形结构数据处理,一般表结构通常会常用id,pid这种设计方案. 之前用oracle.sqlServer数据库,用相应的语法即可获取树形结构数据(oracel:connect ...
- 将mdf文件copy到docker对应的目录下
将mdf文件copy到docker对应的目录下: (<Docker-Container ID> 需要整体替换) docker cp /Users/Jay/Works/db/MyPost.m ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 Areas区域说明
https://www.cnblogs.com/webapi/p/5976642.html Asp.Net MVC Areas区域说明 一般网站分为前台+会员后台+管理员后台,做过webform的 ...
- gin框架初识(先跑一个简单demo) ①
Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 先跑一个demo(先安装gin框架,具体见官方地址): 1.vs ...
- VBA连接操作符
VBA支持以下连接运算符. 假设变量A=5,变量B=10,则 - 运算符 描述 示例 + 将两个值添加为变量,其值是数字 A + B = 15 & 连接两个值 A & B = 510 ...