一:新建分部视图

二:布局页_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传值的更多相关文章

  1. ASP.NET MVC之分部视图和ChildAction(三)

    前言 上节我们已经非常清晰并且明确的讲了@Html.ActionLink的作用,这一节我们开始讲讲分部视图以及孩子Action. 话题 在C#中我们知道继承的目的是为了代码的复用,在Web应用程序同样 ...

  2. Asp.net Mvc中分部视图获取后台数据并展示

    方式一: 1.主页面中代码: @{Html.RenderAction("CreateLeftMenu");} 2.Controller中代码: public PartialView ...

  3. ASP.NET MVC 中的视图生成

    关于 ASP.NET MVC 中的视图生成 在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Mode ...

  4. ASP.NET MVC 自定义Razor视图WorkContext

    概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...

  5. ASP.NET MVC学习之视图篇(2)

    继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...

  6. MVC小系列(三)【MVC的分部视图】

    MVC的分部视图: 分部视图在action中返回一定要用PartialView(),而不要偷懒使用View(),因为如果使用后者,系统会认为是一个标准视图,会为它加个默认的母版页(LayOut),除非 ...

  7. 4.ASP.NET MVC 5.0 视图之模型绑定

    大家好,这篇文章,我将向大家介绍ASP.NET MVC的模型视图绑定,ASP.MVC的模型绑定分为两种:一种是动态绑定[Dynamic Binding];还有一种就是强类型绑定[Strongly ty ...

  8. ASP.NET MVC扩展自定义视图引擎支持多模板&动态换肤skins机制

    ASP.NET mvc的razor视图引擎是一个非常好的.NET MVC框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的项目支 ...

  9. ASP.NET MVC 扩展自定义视图引擎支持多模板&动态换肤skins机制

    ASP.NET  mvc的razor视图引擎是一个非常好的.NET  MVC 框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的 ...

随机推荐

  1. PLSQL设置文件夹排序并设置颜色

  2. hdu 1209 Clock

    Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. php 大数组 foreach 循环嵌套的性能优化

    前提:最近在做后台的时候,页面加载太慢,故第一时间想到的自然是优化SQL, 优化后sql查询速度从 2秒变成了零点几秒, 以为就这麽完事了,然并卵,加载竟然花费30秒! 这麽慢,然后在代码中分块记录它 ...

  4. web平台大数据请求传输性能处理

    在XMLHttpRequest请求中使用ArrayBuffer方式,和后端服务器进行二进制的传输交互. 在项目中发现随着用户增长,部分前端功能,请求的数据量越来越大,传统的josn的方式,在下载.序列 ...

  5. windows安装memcache并为php添加memcache扩展

    第一步:安装包下载 1.4.5 版本之前用作为一个服务安装,1.4.5 版本之后用任务计划中启用一个普通进程来使用 具体内容如以下链接:http://www.runoob.com/memcached/ ...

  6. python学习-42 装饰器 --- 函数闭包1

    函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson( ...

  7. recover函数捕获异常

    package main import ( //"fmt" "time" ) func test () { var m map[string]int m[&qu ...

  8. MySQL部分2

  9. js文件分段上传

    前端代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/T ...

  10. (五)Maven中的聚合和继承

    一.为什么要聚合? 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我 ...