0

マスターページとコンテンツページを使用するプロジェクトに取り組んでいます。私のマスターページのナビゲーションバー:

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
        <Items>
            <asp:MenuItem NavigateUrl="~/ProjectPage.aspx" Text="Home" />
            <asp:MenuItem NavigateUrl="~/ProductBacklog.aspx" Text="Product Backlog"/>
            <asp:MenuItem NavigateUrl="~/SprintBacklog.aspx" Text="Sprint Backlog" />
            <asp:MenuItem NavigateUrl="~/MeetingPage.aspx" Text="Meetings" />
            <asp:MenuItem NavigateUrl="~/Burndown.aspx" Text="Burndown"/>
            <asp:MenuItem NavigateUrl="~/About.aspx" Text="About Us"/>
        </Items>
    </asp:Menu>

コンテンツページの1つで、サブメニューメニュー項目を「スプリントバックログ」メニュー項目に動的に追加します。ボタンがあり、ユーザーがそのボタンをクリックするたびにサブメニュー項目が追加されるため、ユーザーがナビゲーションメニューの[スプリントバックログ]にカーソルを合わせると、サブメニューが表示されます。これを行うには、メニュー項目のリストを作成し、(表示されるテキスト、値、navigationURL)を使用して新しいメニュー項目を作成し、メニュー項目をメニュー項目のリストに追加してから、リストをセッションに保存します。

    protected void btSave_Click(object sender, EventArgs e)
    {            
        menuItemList = (List<MenuItem>)Session["menuItemList"];
            if (menuItemList == null)
            {
                menuItemList = new List<MenuItem>();    
            }

            MenuItem menuItem = new MenuItem("Sprint " + sprintNumber, sprintNumber.ToString(), "SprintBacklog.aspx");
            menuItemList.Add(menuItem);
            Session["menuItemList"] = menuItemList;     
    }

マスターページのコードビハインドで、menuitemsのリストを作成し、Sessionからmenuitemのインスタンスの値を設定し、適切なインデックスでナビゲーションメニューに子アイテムを追加します。私が追加している子アイテムは、menuitemsのリストからのmenuitemsです。

List<MenuItem> menuItemList;

    protected void Page_Load(object sender, EventArgs e)
    {
        menuItemList = (List<MenuItem>)Session["menuItemList"];

        if (menuItemList != null)
        {
            foreach (MenuItem menuitem in menuItemList)
            {
                NavigationMenu.Items[2].ChildItems.Add(menuitem);
            }
        }
    }

これらの子アイテムを作成したときに値を指定したことは知っていますが、SprintBacklog.aspxコンテンツページをロードしているときにこれらの値にアクセスすることが問題です。ユーザーが子アイテムの1つをクリックすると、常にSprintBacklog.aspxに移動しますが、そのページのコンテンツは、クリックした子アイテムによって異なる必要があります。彼らがクリックした子アイテムを知り、その値にアクセスしてコンテンツページに入力する方法が必要です。

誰かが私がこのすべてを実行するためのより良い方法を持っているなら、私は提案と変化を受け入れます。そうでなければ、私のセットアップが機能し、クリックされた子アイテムの値を抽出する方法がある場合、私はそれを本当に知りたいです。

マスターページで子アイテムをハードコーディングすると、値を簡単に取得できますが、問題は、サブメニューの子アイテムを動的に作成しているため、アクセス方法がわからないことです。

どんな助けでも本当にありがたいです!ありがとう!

-ホセ

4

1 に答える 1

0

この質問をしてから久しぶりで、マスターページがどのように機能するのかよくわかりませんが、誰かが同じようなことを経験している場合は、提案があるかもしれません。

私が作成していた各メニュー項目は、次のようにSprintBacklog.aspxにリンクしていました。

MenuItem menuItem = new MenuItem("Sprint " + sprintNumber, sprintNumber.ToString(), "SprintBacklog.aspx");

私がすべきことは、SprintBacklog.aspxにリンクすることでしたが、スプリントIDを使用してリクエストにパラメーターを追加することもできました。

次に、SprintBacklog.aspxのレンダリングを処理するコントローラーがパラメーターを読み取り、レンダリングする適切なデータをフェッチします。

于 2014-02-02T09:15:07.523 に答える