2012-08-16 83 views
0

我有一個母版頁和一個子頁面(頁面使用母版頁)。ASP.NET主頁變量設置/訪問

我有我從孩子頁面(像這樣)調用類/功能:

new MasterPageSiteWide().setGeoAndLanguage(ViewState["_country"].ToString(), _lang); 

這調用函數(如當我一步通過它執行值)。

在母版頁,我有:

public partial class MasterPageSiteWide : System.Web.UI.MasterPage 
{ 
    public string _closeTimeType; 
    public string _langForCalendar; 

    public void setGeoAndLanguage(string nation, string lang) 
    { 
     string globalresourcestring = string.Empty; 
     _langForCalendar = (String)GetGlobalResourceObject("share", "lblCalendarLang"); 

     switch (nation.ToUpper()) 
     { 
      case "USA": 
       ViewState["geo"] = "USA"; 
       ViewState["langID"] = 1; 
       _closeTimeType = "PTPA"; 
       break; 
      case "CAN": 
       if (lang.ToUpper() == "FR") 
       { 
        ViewState["geo"] = "CAN"; 
        ViewState["langID"] = 2; 
        _closeTimeType = "CANPA"; 
       } 
       else 
       { 
        ViewState["geo"] = "CAN"; 
        ViewState["langID"] = 1; 
        _closeTimeType = "CANPA"; 
       } 
       break; 
      case "MEX": 
       ViewState["geo"] = "MEX"; 
       ViewState["langID"] = 3; 
       _closeTimeType = "MEXPA"; 
       break; 
      default: 
       ViewState["geo"] = "USA"; 
       ViewState["langID"] = 1; 
       _closeTimeType = "PTPA"; 
       break; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

當通過它的代碼步驟設置變量_closeTimeType_langForClaendar(我能看到的值)。

但是當它回到子頁面時,這些值是null。我訪問他們像這樣:

Master._closeTimeType 

另外,ViewState變量null母版頁加載後。

注:我確實有.aspx頁面上這一行:

<%@ MasterType virtualPath="~/MasterPageSiteWide.master"%> 

爲什麼變量沒有跟上我設置值是多少?

回答

0

根據你的榜樣,我想你可能會無意中實例化一個額外母版頁,當在現實中你要撥打的母版頁賴以現有頁面實例的基礎上的功能。你可以嘗試從孩子第一個類似於下面的轉換:

((MasterPageSiteWide)this).setGeoAndLanguage(ViewState["_country"].ToString(), _lang); 

您可能還可以,只是試它一試,如

Master.setGeoAndLanguage(ViewState["_country"].ToString(), _lang); 

應該從當前調用母版頁功能頁面實例,並使頁面按照您的預期運行(保留值)。希望有所幫助。

+0

這對常規變量(YEA)有效,但對於母版頁上函數中的ViewState變量設置它,但是當函數調用完成時,viewstate變量在返回主頁面時設置爲null – Brad 2012-08-16 16:01:54

+0

對setGeoAndLanguage(...)的調用在哪裏進行?可能會很長,但您可能需要調用頁面的TrackViewState()方法以確保.NET跟蹤您添加的ViewState值... – 2012-08-16 18:03:19

+0

爲視圖狀態事物做了一些工作,但是休息工作謝謝! – Brad 2012-08-17 16:19:07