我有一个大类CityModel里面信息很多,
现在页面设计是这样子的:
Master页面上,有显示一些关于CityModel的属性,如Name .Population 等等。
在具体的页面上,也会显示一些CityModel的属性,并能对其中的一些属性,进行修改。
Master:public partial class InternalPage : System.Web.UI.MasterPage
{
    public  CityModel city = null;    public CityModel City
    {
       get
       {
          return city;
       }
      set
      {
          city = value;
      }
    }    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
             city = new   CityModel();
             .........
         }
            
        }
    }我的设想是这样子的,为了避免重复读取数据(因为City类的东西太多了),在Master Load事件中实例化City
然后在具体的页面上,通过Master属性来 引用这个City属性具体的页面public partial class Overiew : System.Web.UI.Page
{
    public  CityModel city;     protected void Page_Load(object sender, EventArgs e)
    {
        city = ((InternalPage)this.Master).City;
         lblcityId.text = city.CityId.ToString();
     }
    
}问题是,后来我发现在具体页面load事件中报错了,原因是先执行了具体页面中的Load事件,再执行的Master上的Load事件,于是在具体页面时这个city为null, 这让我很疑惑?我原以为是先执行Master的Load再执行本页上的Load我现在不知道应该怎么办了,请教大侠们!另外一个问题:我的具体页面上,会有一些button事件,会更新Master上一些属性。
我想问的是,是不是只有分别在各个页面上的buttion事件中加上一些 
(lable) Master.FindControl('lblCityName‘).text = city.CityName 之类的东东,才能实现同步显示?
不知道我的问题,没有描述清楚!谢谢大家了  

解决方案 »

  1.   

    建议使用Cache来实现全局显示
      

  2.   

    Master Page 子控件初始化
    内容页面子控件初始化
    Master Page 初始化
    内容页面初始化
    内容页面 Page_Load
    Master Page 的 Page_Load
    Master Page 子控件加载
    内容页面子控件加载
    内容页面的 Page_Load 先于 Master Page 的 Page_Load
    访问 Master Page 里的服务器控件,在内容页面的 Page_LoadComplete 方法里写代码。通过缓存实现数据同步
      

  3.   

    写了个例子:Global.asax:
    <%@ Application Language="C#" %><script runat="server">    void Application_Start(object sender, EventArgs e)
        {
            //在应用程序启动时运行的代码
            if (HttpRuntime.Cache["model"] == null)
            {
                dd.Class1 test = new dd.Class1();
                test.CityName = "BeiJing";
                HttpRuntime.Cache["model"] = test.CityName;
            }
        }
        
        void Application_End(object sender, EventArgs e) 
        {
            //在应用程序关闭时运行的代码    }
            
        void Application_Error(object sender, EventArgs e) 
        { 
            //在出现未处理的错误时运行的代码    }    void Session_Start(object sender, EventArgs e) 
        {
            //在新会话启动时运行的代码    }    void Session_End(object sender, EventArgs e) 
        {
            //在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式 
            //设置为 StateServer 或 SQLServer,则不会引发该事件。    }
           
    </script>具体页面:
    TextBox1.Text = Cache["model"].ToString();
      

  4.   

    谢谢您们 kyaspnet 和  wuyq11!
    好人啊~,