0

我有一个母版页和一个子页(使用母版页的页面)。

我有一个从子页面调用的类/函数(像这样):

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"%>

为什么变量不保持我设置的值?

4

1 回答 1

0

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

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

您也可以直接尝试,例如

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

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

于 2012-08-16T15:35:34.747 回答