一:新建分部视图

二:布局页_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. linux环境上报异常java.lang.NoSuchMethodError

    23-Apr-2019 18:11:35.545 INFO [http-nio-10052-exec-10] org.apache.catalina.core.ApplicationContext.l ...

  2. 京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)

    1.注册成为开发者 链接:https://dev.jd.com/ 2.创建应用 3.获取appsrecet和appkey,SDK(获取) 新建应用之后在左边应用证书栏位可以查看到appkey,apps ...

  3. [学习笔记] Blender layout 视图切换

    layout 数字键5  --- 正交视图/透视图 切换 数字键0 -- 摄像机视图 数字键7 -- 顶视图 数字键1 --- 前视图 数字键3 --- 右视图 ctrl +数字键3 --- 左视图 ...

  4. 日常工作问题解决:centos7下配置网卡以及查询网卡UUID

    目录 1.配置网卡 1.1 网卡查看命令:ifconfig -a 1.2 网卡配置文件说明 1.3 重启网络服务 2.查看确认网卡UUID 2.1 网卡配置文件正常时 2.2 网卡配置文件不可用或者配 ...

  5. 结合 Nginx 谈谈 Http 状态码

    [Http状态码简介] [百度百科]HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到 RFC ...

  6. LeetCode_#1_两数之和 Two Sum_C++题解

    1. 两数之和 Two Sum 题目描述 Given an array of integers, return indices of the two numbers such that they ad ...

  7. wordpress 后台无法登录 网站内容缺失

    昨天网站又突然不正常了,前两天都是好的.. 具体来说就是wp后台登录不进去,一直在登录页跳转,与此同时服务器上其他网站也有这个问题,而且有些网站的板块内容也缺失了, 所以首要就是要登录进后台看看是不是 ...

  8. python-django-天天生鲜项目

    1 需求分析 github源码:https://www.github.com/wangyingchuang/dailyfresh 1.1  用户模块 1) 注册页 l  注册时校验用户名是否已被注册. ...

  9. 创客课堂——Scratch的操作界面

    大家好,这里是蓝精灵创客公益课堂,我是蓝老师 上期我们了解了scratch软件进行了简单的了解,很多朋友都已经按照上期方法下载安装好了软件. 那么今天蓝老师就和大家一起认识下Scratch的操作界面及 ...

  10. hdu 6153 思维+扩展kmp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 扩展kmp不理解的看下:http://www.cnblogs.com/z1141000271/p ...