1

現在、マスターページにSiteMapDataSourceをロードするaspメニューコントロールがあります。サイトマップノードの1つは、一般的な「Tools.aspx」コンテンツページを開く「Tools」です。

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/Default.aspx" title="Home"  description="">
    <siteMapNode url="Tools.aspx" title="Tools"  description="" />
  </siteMapNode>
</siteMap>

「Tools.aspx」ページには、ユーザーを別のコンテンツページ「Translator.aspx」に移動するための画像ボタンが含まれています。このページに移動すると、[ツール]メニュー項目が選択されなくなります。私の質問は、「Translator.aspx」ページ内のマスターページから「ツール」メニュー項目を選択するにはどうすればよいですか?

「Translator.aspx」ページの読み込み内で次の方法を試しました。

protected void Page_Load(object sender, EventArgs e)
{
    //check if logged in
    if (!Page.IsPostBack)
    {
        Menu mp_Menu = (Menu)Page.Master.FindControl("mnuMaster");

        foreach (MenuItem mi in mp_Menu.Items)
        {
            if (mi.Text == "Tools")
            {
                mi.Selected = true;
            }
        }

    }
}

これは機能せず、0個のメニュー項目が返されるようです。

誰かがこの問題に光を当てることができれば本当にありがたいです。ありがとう。

4

2 に答える 2

0

ロード後にメニューがロードされていないことを確認するために、ライフサイクルの後半でコードをpre_renderなどに移動してみてください

于 2011-06-24T10:16:06.757 に答える
0

マスターページに次のコードを入力することで、これを解決しました。

protected void mnuMaster_MenuItemDataBound(object sender, MenuEventArgs e)
    {
        if (Session["Translator"] != null)
        {
            if (mnuMaster.Items.Count > 0)
            {
                foreach (MenuItem mi in mnuMaster.Items)
                {
                    if (mi.Text == "Tools")
                    {
                        mi.Selected = true;
                        Session["Translator"] = null;
                    }
                }
            }
        }
    }

次に、「Translator.aspx」ページに以下を追加しました。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Session["Translator"] = "true";
        }
    }

これは理想的な解決策ではないと思いますが、私にとってはうまくいきました。

于 2011-06-24T18:17:22.957 に答える