ASP.NET页面内容不会改变
问题描述:
我创建了一个应用程序,它具有一个菜单,其中的项目是动态创建的。该菜单充当语言菜单。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逻辑。
我在做什么错?
答
的Page_Load
是之前触发的MenuItemClick
事件,从而导致你的Session变量设置您的网页更新后。
要解决此问题,您可以将Page_Load
中的代码移动到Page_PreRender
事件处理程序,该程序在MenuItemClick
之后触发。
答
解决方法是在更新Session中的语言首选项后,将用户重定向到同一页面。
public void LanguageMenu_MenuItemClick(Object sender, MenuEventArgs e)
{
Session["language"] = e.Item.Text;
Response.Redirct("samepage.aspx");
Response.End();
}
我将我的代码移动到了一个方法,我启动了页面加载,并且还点击了我的menuitem。基本上,解决方案是一样的,将它从page_load移出。 感谢您清理那个 – WtFudgE 2010-04-02 12:25:19