看了msdn的介绍和例子:The followin code example shows how to use a content page to  access the public property    
 
SiteName on the master page in the preceding code example.  
在content page可以调用master page的公共属性  
问题是:我想把公共属性放在cs的类文件而不是aspx文件,在content page就无法调用了。  
代码如下:  
public partial class myMaster : System.Web.UI.MasterPage  
{  
 
       protected  void  Page_Load(object  sender,  EventArgs  e)  
       {  
                 
       }  
       public  string  demo  
       {  
               get  
               {  
                       return  "test";  
               }  
       }  
 
               
}  
在content page中:  
 
myMaster  =  (myMaster)this.Master;  
myMaster.  --这时候看不到demo这个属性的,强制调用也不可以

解决方案 »

  1.   

    http://www.webjx.com/htmldata/2005-11-28/1133131041.html
    http://chagel.mvpcn.net/PermaLink.aspx?guid=bdebcc52-6718-4012-a1e8-6d99b429fb56
      

  2.   

    default.aspx<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page"%>
    <%@ MasterType VirtualPath="~/MasterPage.master" %> 关键注意这里
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    </asp:Content>
     protected void Button1_Click(object sender, EventArgs e)
        {
            Master.LabelOfMasterPage = "aa";
        }masterpage.master
     <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
            </asp:contentplaceholder>
        </div>
        </form>  public string LabelOfMasterPage
        {
            get { return this.Label1.Text; }
            set { this.Label1.Text = value; }
        }
      

  3.   

    to :loveCherry
    你说的,我已经尝试过了
    在contentpage的cs中还是无法调用的;
      

  4.   

    msdn的那个例子可以顺利调试通过,但是我想把属性放在cs,而不是aspx文件中
    这样在content page中就无法调用了。
      

  5.   

    to  :loveCherry  
    你说的,我已经尝试过了  
    把属性放在aspx文件中,使用如下形式,类似msdn的例子
    <script runat =server >
     public string LabelOfMasterPage
        {
            get { return this.Label1.Text; }
            set { this.Label1.Text = value; }
        }
    </Scrip>
    这样在aspx中是可以使用<script ></Scrip>的形式来调用。
    但是
    1、无法在content page的cs文件(partial class中)调用
    2、如果在master page中也将属性放在cs文件(partial class中),
    那么在contentpage的cs和aspx中都是无法调用的;
      

  6.   

    同意:LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) (
      

  7.   

    to:ye_zi
    你的同意是解决不了问题的 :)
    其实可能最终的疑惑是这样的:
    在代码隐藏文件中可以直接调用Aspx界面文件中定义的控件;
    反之则不可以,即在partial cs文件中定义的公共属性,在aspx中是无法被调用的感觉自己对partial 类的理解的问题
    还请思归来释疑
    思归,你在哪里 :)
      

  8.   

    myMaster  =  (myMaster)this.Master;中的this.Master是怎么来的?
      

  9.   

    >>>1、无法在content page的cs文件(partial class中)调用你肯定么?你用的是正式的版本 (2.0.50727) 么?1. MasterPage.master<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>master page
            <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
            </asp:contentplaceholder>
        </div>
        </form>
    </body>
    </html>2. MasterPage.master.cs
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    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 partial class MasterPage : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }     public  string  demo  
           {  
                   get  
                   {  
                           return  "test";  
                   }  
           }  }3. Content.aspx<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Content.aspx.cs" Inherits="Content" Title="Untitled Page" %>
    <%@ MasterType VirtualPath="~/MasterPage.master" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        Content Page:<br />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </asp:Content>4. Content.aspx.csusing System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    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 partial class Content : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
           /* MasterPage m = (MasterPage)this.Master;
            Response.Write(m.demo);
            */
            
            MasterPage m = this.Master;
            Response.Write(m.demo);
            
        }
    }>>>对partial 类的理解的问题最终的类是从cs中的partial类以及动态产生的一个含有控件声明的类合并后的类继承来的http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/Internals.asp
      

  10.   

    先给出我的完整代码:
    1、myMasterPage.Master
    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="myMasterPage.master.cs"
        Inherits="myMasterPage" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
        public string demoAspx
        {
            get { return "demoAspx"; }
        }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </form>
    </body>
    </html>2、myMasterPage.master.cs
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    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 partial class myMasterPage : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        public string demoPartial
        {
            get { return "demoPartial"; }
        }
    }3、Content.Aspx
    <%@ Page Language="C#" MasterPageFile="~/myMasterPage.master" AutoEventWireup="true"
        CodeFile="content.aspx.cs" Inherits="content" Title="Untitled Page" %>
    <%@ MasterType VirtualPath="~/myMasterPage.master" %>
    <script runat="server">
        protected void demo()
        {
            myMasterPage myMaster = this.Master;
            Response.Write(myMaster.demoPartial);
        }    
    </script>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    </asp:Content>4、Content.Aspx.cs
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    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 partial class content : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            myMasterPage myMaster = this.Master;
            Response.Write(myMaster.demoPartial);
        }
        
    }
    我在MasterPage的aspx及cs中定义了两个属性:demoAspx及demoPartial
    然后分别在contentPage的aspx及partial class(以下简称cs)中调用
    昨天出现的问题是无法在contentPage的aspx及cs中调用masterPage cs定义的属性
    今天上班后重新打开vs.net2005调试,昨天的问题就不存在了。
    而出现的的新问题是:无法调用masterPage aspx定义的属性
    呵呵,大家可以把我的代码copy去调试
    现在我给出的解释,就是可能因为我安装的是D版么? :)
      

  11.   

    PS
    我安装的是vs.net2005 英文版2.0.50727 (D版)
    OS是win2000英文版sp4 (正版)
    不过机器同时还安装有vs.net2003英文版1.1.4322 sp1 (正版)
      

  12.   

    最新修正:
    如果
    1、myMasterPage.Master
    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="myMasterPage.master.cs"
        Inherits="myMasterPage" %>
    修改为:
    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="~/myMasterPage.master.cs"
        Inherits="myMasterPage" ClassName="myMasterPage" %> --即加入className
    那么:
    在content的aspx中可以调用demoAspx属性的
      

  13.   

    >>>即加入className只要你有
    <%@ MasterType VirtualPath="~/myMasterPage.master" %>你总是可以访问你的MasterPage的属性/方法的,使用this.Master.demo或者this.Master.demoAspx,只要它们是公开的
      

  14.   

    没有用过ASP.NET2.0呢还,感觉自己好落伍啊不过思归老大都来了,怎么着也得听听课嘿嘿。。学习ing........
      

  15.   

    多谢思归老大!
    最重要的指点:“你总是可以访问你的MasterPage的属性/方法的,使用this.Master.demo或者this.Master.demoAspx,只要它们是公开的”
    我一直想用如下的方式调用:
    myMasterPage myMaster = this.Master;
    myMaster.属性
    我的实践证明:用myMaster即使设置了MasterType,那么也无法在content cs中调用masterpage aspx公开的属性的 :)
    总结:
    一、在content page的aspx中设置mastertype,在content page的aspx或cs中直接调用this.Master.属性(方法);
    二、如果使用myMasterPage myMaster = this.Master;使用myMaster来调用,那么:
        1、master page  的aspx中加入className,那么在master page aspx中定义的属性在content page的aspx中可见;
        2、content page 的aspx中调用master page的aspx或cs定义的方法都可见;
        3、content page 的cs  中调用master page的cs定义的方式可见,无法调用master page的aspx定义的方法;