使用& lt; ul>用于导航(不能记住状态)
本文关键字:不能 状态 导航 用于 lt ul 使用 | 更新日期: 2023-09-27 18:10:22
我有一个使用ul和li的导航菜单。我可以填充它,但它不能记住它的状态,一旦回发发生或如果我移动到一个新的页面。
代码如下:
Masterpage。
<ul id="main-nav">
<li>
<a href="MPTest2.aspx" class="nav-top-item" runat="server">
Employees
</a>
<ul id="mgList" runat="server" >
</ul>
</li>
</ul>
MasterPage.Master.cs
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection(@"Data Source= localhost;Initial Catalog=ServerDb;Integrated Security=True");
connection.Open();
SqlCommand sqlCmd = new SqlCommand("select EmpName, EmpID from Employee order by EmpName", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt);
connection.Close();
if (dt.Rows.Count > 0)
{
HtmlGenericControl li;
for (int j = 0; j < dt.Rows.Count; j++)
{
li = new HtmlGenericControl("li");
HtmlAnchor a = new HtmlAnchor();
a.HRef = "~/MPTest1.aspx?MGID=" + Convert.ToInt32(dt.Rows[j]["EmpID"]);
a.InnerText = dt.Rows[j]["EmpName"].ToString();
li.Controls.Add(a);
mgList.Controls.Add(li);
}
}
}
JQuery: $(document).ready(function(){
//Sidebar Accordion Menu:
$("#main-nav li ul").hide(); // Hide all sub menus
$("#main-nav li a.nav-top-item").click( // When a top menu item is clicked...
function() {
$(this).parent().siblings().find("ul").slideUp("normal"); // Slide up all sub menus except the one clicked
$(this).next().slideToggle("normal"); // Slide down the clicked sub menu
return false;
}
); }
现在我知道hide()函数隐藏了所有需要第一次调用的菜单。但在那之后,我需要一个类或函数来记住菜单的状态,如果它是打开的,而不是崩溃的一切。
如果你能给我一些建议或例子就太好了。
谢谢
我知道这不是你想要的,但这是我用来跟踪我的菜单/子菜单的活跃度。我相信您应该能够使用我下面提供的前提来显示正确的菜单项。我可能也不理解这个问题,如果是这种情况,请让我知道,我会尽量进一步帮助。下面的例子是用Razor MVC3。
我还想指出,对于这段代码,我将自己限制为两层菜单,如果您使用更多的菜单,您应该修改代码以使其递归更健壮。
$(function () {
$("#menu li a[href='@Request.Url.LocalPath'],#menu li a[href='@(Request.Url.PathAndQuery)']").parent("li").addClass("current_page_item");
$("li.current_page_item").parent("ul").parent("li").addClass("current_page_item");
});
在你下面评论的主题中,我相信你可以像下面这样做,虽然不完美,但可能会给你一个正确方向的开始。
[WebMethod]
public static string MarkOpened(string id)
{
HttpContext.Current.Session["currentPage"] = id
}
$(document).ready(function(){
$("#main-nav li a.nav-top-item:<%= HttpContext.Current.Session["currentPage"] %>").next().slideToggle("normal");
$("#main-nav li a.nav-top-item").click(function(){
$.ajax({
type: "POST",
url: location.href + "/MarkOpened",
contentType: "application/json; charset=utf-8",
data: "{ 'id':'" + $(this).attr("something") + "'}",
dataType: "json"
});
};
); }
您可以使用cookie来存储状态变化,并在页面加载时重新加载它。如果你不想使用默认的JavaScript,可以使用jQuery插件来管理cookie