ASP.NET Master Page变量设置/访问

时间:2012-08-16 15:03:44

标签: 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"%>

为什么变量没有保留我设置的值?

1 个答案:

答案 0 :(得分:0)

根据您的示例,我认为您可能无意中实例化了一个附加母版页,而实际上您想要调用现有页面实例基于。您可以尝试类似于子页面中的以下演员:

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

您也可以直接尝试,例如

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

这应该从当前页面实例调用母版页功能,并使页面按预期运行(保留值)。希望有所帮助。