ASP.NET页面内容不会更改

时间:2010-04-02 09:36:43

标签: asp.net

我创建了一个应用程序,其中包含一个动态创建项目的菜单。菜单充当语言菜单。

<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>
    ...

我使用会话变量来设置我当前的语言。

但是,如果我点击菜单更改会话变量:

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

页面使用以下代码重新加载:

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);
            }

事情是内容不会改变,只有在我点击其他内容之后。

如果我在单击menuItem后跳过我的代码,我可以看到它传递了代码并且它应该更改,但是由于某种原因,页面需要另外一个额外的触发器来修改它的内容。

我也看到页面正在重新加载,所以我不明白为什么它不会立即改变。我想我还没有理解asp.net逻辑。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

Page_Load事件之前触发 {strong>,因此会导致您的会话变量在页面更新后设置为

要解决此问题,您可以将MenuItemClick中的代码移至Page_Load事件处理程序,该处理程序在Page_PreRender之后触发。

答案 1 :(得分:0)

解决方法是在更新会话中的语言首选项后将用户重定向到同一页面。

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