2012-08-16 66 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