假设有母版页第一级母版页MasterPage.master,第二级母版页MasterPage2.master是MasterPage.master的内容页,Default.aspx是MasterPage2.master的内容页,一般情况下Default.aspx是打不开设计视图的(MasterPage2.master也打不开,但无法解决),在网上找了找,有两种解决办法:
1.首先新增一个类:BasePage.cs
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public class BasePage : System.Web.UI.Page { private string runtimeMasterPageFile; public string RuntimeMasterPageFile { get { return runtimeMasterPageFile; } set { runtimeMasterPageFile = value; } } protected override void OnPreInit(EventArgs e) { if (runtimeMasterPageFile != null) { this.MasterPageFile = runtimeMasterPageFile; } base.OnPreInit(e); } }
然后修改Default.aspx的Page指令:
修改前:
<%@ Page Language="C#" MasterPageFile="MasterPage2.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
修改后:
<%@ Page Language="C#" MasterPageFile="" RuntimeMasterPageFile="MasterPage2.master" CodeFileBaseClass="BasePage" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
最后修改Default.aspx的后台代码的继承:
修改前:
public partial class Demo_Default : System.Web.UI.Page
修改后:
public partial class _Default : BasePage
经过以上三步的修改,就可以打开Default.aspx的设计视图了
2.其实还有更简单的一种方法:
就是在Default.aspx的Page指令的MasterPageFile="MasterPage2.master" 的反引号前多加个空格
修改前:
<%@ Page Language="C#" MasterPageFile="MasterPage2.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
修改后:
<%@ Page Language="C#" MasterPageFile="MasterPage2.master " AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
这样就可以打开Default.aspx的设计视图了
在第一种方法中
MasterPageFile值为空,意思是编辑时无母版页,RuntimeMasterPageFile值是嵌套母版页,意思是运行时有母版页,CodeFileBaseClass的意思是你的页面类继承自:BasePage。如果不加CodeFileBaseClass,则会报错,因为RuntimeMasterPageFile不是Page的默认指令。
第二种方法则是取了个巧,其实,在后面加任何一个字母都可以。也就是说,在切换视图的时候,只要保证和正确的母版页地址有错误,那么就能够切换。但是用其他字母会造成无法运行的情况,因为加了其他字母,也就是换成了别的母版页,而实际并不存在这个母版页。而用空格的话,它在运行时,去找母版页的时候,是做了一个TRIM的动作,去掉了空格。所以,加空格即可以切换也可以运行。
在打开 Default.aspx的设计视图时可能不是按照你想象中的顺序排的,不用管他,它在运行的时候会自动排好的!
Demo下载:
http://ljzforever.qupan.com/?folder=951925
参考的文章:
VS2005中显示使用嵌套母版的设计视图
http://blog.csdn.net/sdtsfhh/archive/2008/07/02/2604335.aspx
Tips for Nested Master Pages and VS 2005 Design-Time
http://weblogs.asp.net/scottgu/archive/2005/11/11/430382.aspx
VS2005的关于母版页嵌套的一个小技巧