используя <ul>для навигации (не помню состояние) - PullRequest
0 голосов
/ 05 октября 2011

У меня есть меню навигации с использованием ul и li .. Я могу заполнить его, но оно не может вспомнить его состояние после обратной передачи или перехода на новую страницу.

Вот код:

MasterPage.master

 <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 () скрывает все меню, которые необходимо вызвать в первый раз. Но после этого мне нужен класс или функция, которая запоминает состояние меню, если оно было открыто, а не сворачивает все.

Было бы здорово, если бы я мог получить некоторые предложения или примеры.

Спасибо

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Я знаю, что это не совсем то, что вы ищете, но это то, что я использую для отслеживания активности моего меню / подменю. Я полагаю, что вы сможете использовать предпосылку, представленную ниже, для отображения правильных пунктов меню. Возможно, я тоже не понимаю вопроса, если это так, пожалуйста, дайте мне знать, и я постараюсь помочь вам в дальнейшем. Пример ниже используется с 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"
        });
    };
); }
1 голос
/ 05 октября 2011

Вы можете использовать куки-файл для хранения состояния при его изменении и повторной загрузки при загрузке страницы. Существует плагин jQuery для управления файлами cookie, если вы не хотите использовать JavaScript по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...