【发布时间】:2011-07-19 19:56:40
【问题描述】:
我会保持简单。出于开发目的,我想创建代表各种用户类型的“模式”,它们将相应地看到不同的菜单栏。我已经按照我想要的方式获得了一切,除了在选择我希望操作的“模式”之后,只要我点击一个菜单项,它就会忘记它所处的“模式”并使用默认菜单栏刷新.我假设这是 ViewState 无法在回发中正确维护的问题?我搜索了所有论坛和其他地方,无法弄清楚如何完成我想要的。这是我的代码隐藏代码。
我在 Page_Load 中添加了以下内容:
If Not IsPostBack Then
modeMenu.SelectedValue = Session("mode")
End If
编辑:其余部分相同,只是后面的代码中多了一行。感谢 TC 的回答:)
<asp:Menu ID="mode1Nav" runat="server" CssClass="menu"
Visible="False" ViewStateMode="Enabled">
<Items>
<asp:MenuItem NavigateUrl="~/Home1.aspx" />
<asp:MenuItem NavigateUrl="~/DoSomething1.aspx" />
</Items>
</asp:Menu>
<asp:Menu ID="mode2Nav" runat="server" CssClass="menu"
Visible="False">
<Items>
<asp:MenuItem NavigateUrl="~/Home2.aspx" />
<asp:MenuItem NavigateUrl="~/DoSomething2.aspx" />
</Items>
</asp:Menu>
这个“modeMenu”用来选择我的模式。
<asp:DropDownList ID="modeMenu" runat="server" AutoPostBack="True"
ViewStateMode="Enabled" CssClass="modeMenu">
<asp:ListItem>Mode1</asp:ListItem>
<asp:ListItem>Mode2</asp:ListItem>
</asp:DropDownList>
Sub 后面的这段代码旨在为您所处的任何模式显示适当的菜单,记住它,哈哈。
Protected Sub mode(ByVal sender As Object, ByVal e As System.EventArgs) Handles modeMenu.Load, modeMenu.SelectedIndexChanged
Session.Add("mode", modeMenu.SelectedValue) //Added this
Select Case (modeMenu.SelectedValue)
Case "Mode1"
mode1Nav.Visible = True
mode2Nav.Visible = False
Case "Mode2"
mode1Nav.Visible = False
mode2Nav.Visible = True
End Select
End Sub
就像我说的,问题是在选择我的模式后,一旦我尝试使用菜单,它就会刷新并忘记模式。
编辑:此外,我添加了以下 CSS 以使我的模式菜单不碍事。它像这样很好地工作。真的很方便开发。 :)
.modeMenu {
position: fixed;
top: 5px;
left: 5px;
}
【问题讨论】:
标签: asp.net menu drop-down-menu postback viewstate