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 に答える