Навигация ASP.NET MVC 3 через вкладки пользовательского интерфейса JQuery

Можно ли реализовать навигацию с помощью вкладок jquery ui вместо стандартных вкладок в проекте asp.net mvc 3? Вкладки очень похожи на те, что на этом сайте (Вопросы, Теги, Пользователи...). Есть примеры для этого?

Вот моя реализация.

1) Я создал стандартный проект MVC 3 с механизмом просмотра бритвы. Меню на странице Layout выглядит так.

<div id="menucontainer">
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home", null, new { title="Index"})</li>
        <li>@Html.ActionLink("About", "About", "Home", null, new { title="About"})</li>
    </ul>
</div>

2) Вот мои действия HomeController.

public PartialViewResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    return PartialView();
}

public PartialViewResult About()
{
    return PartialView();
}

public ViewResult Default()
{
    return View();
}

3) Также я изменил Global.asax.cs, чтобы показать страницу по умолчанию.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Default", id = UrlParameter.Optional } // Parameter defaults
    );

}

4) И, наконец, вот мой скрипт для применения поведения вкладок.

$(document).ready(function() {
$('#menucontainer').tabs();
$("menucontainer").bind('tabsselect',
    function(event, ui) {
        document.title = ui.tab.title;
    }
);});

Таким образом, jQuery ui просто добавляет дополнительные div для каждой вкладки на страницу (в данном случае 2), а после этого добавляется div#main. Я хочу просто динамически заменить содержимое div # main после того, как пользователь перейдет на другую вкладку в строке меню. Теперь это выглядит так.

<div id="menucontainer">
    ...
    <div id="Index">
        Content of Index tab.
    </div>
    <div id="About">
        Content of About tab.
    </div>
</div>
<div id="main">
    Content of the page.
</div>

person Pavel Shchegolevatykh    schedule 19.06.2012    source источник
comment
Что вы пробовали? Это не должно быть проблемой, которую трудно решить, поскольку это всего лишь случай небольшого изменения разметки?   -  person BenjaminPaul    schedule 19.06.2012
comment
Я попытался реализовать это. Я изменил действия контроллера, чтобы возвращать частичные представления. Но когда я перехожу на какую-то вкладку, новый контент просто добавляется внизу и не заменяет старый.   -  person Pavel Shchegolevatykh    schedule 19.06.2012
comment
Можете ли вы опубликовать небольшой код для нас, чтобы посмотреть?   -  person BenjaminPaul    schedule 19.06.2012


Ответы (1)


Убедитесь, что вы определили класс CSS ui-tabs-hide, чтобы скрыть неактивные вкладки:

.ui-tabs-hide {
    display: none;
}

Вкладки jQuery UI работают следующим образом: после изменения вкладки просто добавляется ui-tabs-hide ко всем другим вкладкам и удаляется из видимой в данный момент вкладки после обновления ее содержимого из вызова AJAX.

person Darin Dimitrov    schedule 20.06.2012