开发者

ASP.NET page content doesn't change

开发者 https://www.devze.com 2022-12-25 17:06 出处:网络
I created an application which has a menu where it\'s items are created dynamicly. The menu acts as a language menu.

I created an application which has a menu where it's items are created dynamicly. The menu acts as a language menu.

<body runat="server">
    <form id="Form1" runat="server">
    <table class="TableLayout">
        <tr>
            <td class="TopNav" align="right">
                <asp:Menu runat="server" ID="LanguageMenu" Orientation="Horizontal" OnMenuItemClick="LanguageMenu_MenuItemClick">
                    <LevelMenuItemStyles>
                        <asp:MenuItemStyle CssClass="TopNavItem" />
                    </LevelMenuItemStyles>
                    <StaticHoverStyle CssClass="TopNavItemHover" />
                </asp:Menu>
            </td>
        </tr>
    ...

I use session variables to set my current language.

however if I click on the menu to change the session variable:

public void LanguageMenu_MenuItemClick(Object sender, MenuEventArgs e)
        {
            Session["language"] = e.Item.Text;
        }

The page reloads with the following code:

sportsPath = String.Format(@"{0}{1}\Sports\", xmlPath, Session["language"]);
//create LeftNavigation
            string[] sports = Directory.GetFiles(sportsPath);
            LeftNavigation.Items.Clear();
            foreach (string sport in sports)
            {
                string text = sport.Replace(sportsPath, "").Replace(".xml", "");
                MenuItem item = new MenuItem();
                item.Text = text;
                LeftNavigation.Items.Add(item);
            }

The thing is the content doesn't change, only after I click on开发者_StackOverflow something else.

If I skip through my code after clicking on the menuItem I can see that it passes the code and it should change, however for some reason the page needs another extra trigger to modify it's content.

I also see the page reloading so I don't understand why it's not changing immediatly. I guess I'm not understanding the asp.net logic just quite yet.

What am I doing wrong?


The Page_Load is triggered before the MenuItemClick event, thus causing your Session variable to be set after your page is updated.

To solve this, you could move your code in the Page_Load to the Page_PreRender event handler, which is fired after the MenuItemClick.


The solution to this is to Redirect the User to the same page after updating the language preference in Session.

    public void LanguageMenu_MenuItemClick(Object sender, MenuEventArgs e) 
    { 
        Session["language"] = e.Item.Text;
        Response.Redirct("samepage.aspx");
        Response.End();
    } 
0

精彩评论

暂无评论...
验证码 换一张
取 消