相信不少人与文超一样需要一个MVC嵌套的母版页项模板嵌套的母版有助于细致规划页面公共部分(尤其是要求一改全改的地方)但是目前官方的MVC项模板中尚未提供而事实上制作一份项模板是相当简单的文超懒怠成性遂以先在网上搜索一番希望有现成的以飨懒人未果于是自己动手丰衣足食吧
先来看看最终结果吧那么接下来文超将介绍两点共四种方法
安装完后您将看到 MVC 节点下多了一个 MVC View 嵌套的母版页模板嗯中文字在英文堆里特别显眼
一是大众做法敲多两行代码忍着点也能活等微软的更新(三种)
二是文超写文章的目的所在使用自制的土枪
文超所指的是在MVC尚未提供而又想要得到嵌套的母版页一样的效果时的做法其实如大家所知要在 MVC 下实现这功能相当简单为方便演示例子文超对默认的MVC项目里的 sitemaster 进行了人工改造在母版里加了几个 ContentPlaceHolder
<%@ Master Language=C# Inherits=SystemWebMvcViewMasterPage %>
<!DOCTYPE html PUBLIC //WC//DTD XHTML Strict//EN strictdtd>
<html xmlns=>
<head runat=server>
<title><asp:ContentPlaceHolder ID=TitleContent runat=server /></title>
<link stylesheet type=text/css />
<asp:ContentPlaceHolder ID=HeaderContent runat=server />
</head>
<body>
<div>
<h>这儿是头</h>
<div>
<asp:ContentPlaceHolder ID=BodyContent runat=server />
<h>这儿是其他内容</h>
</div>
<h>这儿是脚</h>
</div>
</body>
</html>
方法一
接着文超再在 Views\Shared 下新建一个 ArticleMaster 母版
要让 ArticleMaster作为 SiteMaster 的嵌套母版只需要将首行的 <%@ Master Language=C# Inherits=SystemWebMvcViewMasterPage %> 加入 MasterPageFile 属性并将其值填入指定嵌套的母版并去掉所有 HTML 代码敲入与嵌套母版 sitemaster 中的 ContentPlaceHolder 对应一致的 Content 即可按文超的例子去掉了首行声明以外的所有 HTML 以后并厌恨其烦地敲了这些代码ArticleMaster 应该长成这样
<%@ Master Language=C# MasterPageFile=~/Views/Shared/SiteMaster Inherits=SystemWebMvcViewMasterPage %>
<asp:Content ID=Content ContentPlaceHolderID=TitleContent runat=server>
</asp:Content>
<asp:Content ID=Content ContentPlaceHolderID=HeaderContent runat=server>
</asp:Content>
<asp:Content ID=Content ContentPlaceHolderID=CSSContent runat=server>
</asp:Content>
<asp:Content ID=Content ContentPlaceHolderID=BodyContent runat=server>
</asp:Content>
方法二
这也是文超之前使用的办法使用ViewContentPage你可以免除了敲入这部分代码的劳累
<asp:Content ID=Content ContentPlaceHolderID=TitleContent runat=server>
</asp:Content>
<asp:Content ID=Content ContentPlaceHolderID=HeaderContent runat=server>
</asp:Content>
<asp:Content ID=Content ContentPlaceHolderID=CSSContent runat=server>
</asp:Content>
<asp:Content ID=Content ContentPlaceHolderID=BodyContent runat=server>
</asp:Content>
但是你要做两件事情
ViewContentPage 生成的文件名扩展名是 aspx你需要将它修改为 master 扩展名
修改首行的 page 指令为 master 指令例如
<%@ Master Language=C# MasterPageFile=~/Views/Shared/SiteMaster Inherits=SystemWebMvcViewMasterPage %>
方法三
方法三是使用 ASPNET WebForm 的嵌套的母版模板这个大家应该都很熟悉你可能要做的也是两件事情
将多余的 mastercs 及 designercs 删掉
将首行的多余属性去掉将 Inherits 属性值设置为: SystemWebMvcViewMasterPage
方法四
这是本文的核心所在这种方法使用自制模板一次性填补上述三种方法的不足既不用如方法一那样敲键盘也不用像方法二那样修改 master 指令更不用像方法三那样删文件一劳永逸一箭三雕一石三鸟一举三得的的确确确确实实实实在在让文超舒心首先文超在这个目录下(MVC项模板目录)
C:\Program Files\Microsoft Visual Studio \Common\IDE\ItemTemplates CSharp\Web\MVC
找到这个压缩文件
MvcViewContentPageItemTemplatevcszip
其实这就是方法二所使用的MVC View Content Page项模板解压到任意一个文件夹(文超解压到桌面去了文超的桌面非常的乱我相信大部分程序员的桌面都是乱的一团糟的)
你将得到两样东西
Views 文件夹
MvcViewNestedMasterPageItemTemplatevcsvstemplate
这份文件正是模板定义是一份 XML 文件接下来进行人工改造改造的结果是这样
<VSTemplate Version= xmlns= Type=Item>
<TemplateData>
<DefaultName>ViewNestedMasterPageMaster</DefaultName>
<Name Package={DCFBFcAAAFBF} ID=>MVC View 嵌套的母版页</Name>
<Icon Package={ccefcfbcf} ID=/>
<Description Package={DCFBFcAAAFBF} ID=>MVC View 继承自其他母版页的母版页</Description>
<ProjectType>CSharp</ProjectType>
<SortOrder></SortOrder>
<SupportsMasterPage>true</SupportsMasterPage>
<NumberOfParentCategoriesToRollUp></NumberOfParentCategoriesToRollUp>
<RequiredFrameworkVersion></RequiredFrameworkVersion>
<TemplateGroupID>MVC</TemplateGroupID>
<ShowByDefault>false</ShowByDefault>
</TemplateData>
<TemplateContent>
<CustomParameters>
<CustomParameter Name=$language$ Value=C# />
<CustomParameter Name=$SelectMaster$ Value=true />
<CustomParameter Name=$viewdatatype$ Value= />
<CustomParameter Name=$usingviewdatatype$ Value= />
<CustomParameter Name=$ParentExtension$ Value=master/>
<CustomParameter Name=$ChildExtension$ Value=cs/>
</CustomParameters>
<References />
<ProjectItem SubType= TargetFileName=$fileinputname$Master ReplaceParameters=true>Views\Home\ViewNestedMasterPageMaster</ProjectItem>
</TemplateContent>
<WizardExtension>
<Assembly>MicrosoftVisualStudioWebExtensions Version= Culture=neutral PublicKeyToken=bfade</Assembly>
<FullClassName>MicrosoftVisualStudioWebMvcItemTemplateWizard</FullClassName>
</WizardExtension>
</VSTemplate>
第二步进入到 Views\Home找到ViewContentPageaspx 文件将其删除然后在此文件夹内创建一份 master 文件据MvcViewNestedMasterPageItemTemplatevcsvstemplate 的改造结果这份文件需要命名为ViewNestedMasterPageMaster这份 master 文件的内容如下
<%@ Master Language=C# MasterPageFile=$MasterPage$ Inherits=SystemWebMvcViewMasterPage %>
$ContentTags$
第三步改完后将其压缩为 ZIP 压缩包(选中 Views 文件夹和 MvcViewNestedMasterPageItemTemplatevcsvstemplate 后右击>发送到>压缩(zipped)文件夹)为它起个统一风格的名字MvcViewNestedMasterPageItemTemplatevcszip
因为时间关系文超已经制作好这份文件了点击此处下载接着你只需要从第四步开始
第四步将ZIP文件复制到刚才 ViewContentPage 项模板同一位置
C:\Program Files\Microsoft Visual Studio \Common\IDE\ItemTemplates CSharp\Web\MVC
第五步添加项模板到 VS
无论你是用 CMD 还是在VS的快捷方式上(别忘记安装完后设置回原来路径)修改都可以你需要使用 setup 选项将创建的项模板添加到 VS 中去执行下面命令行
C:\Program Files\Microsoft Visual Studio \Common\IDE\devenvexe /setup
最后安装完后使用方法与Web Form的嵌套的母版页是一样的enjoy yourself