相信不少人與文超一樣需要一個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
From:http://tw.wingwit.com/Article/program/ASP/201311/21717.html