Обратные ссылки ASP.NET теряют хэш в URL

На странице ASP.NET с вкладкой я использую хеш-код в URL, чтобы отслеживать, на какой вкладке я работаю (используяБарбекю JQuery плагин). Например:

http://mysite.com/foo/home#tab=budget

К сожалению, я только что понял, что на странице есть несколько мест, где я использую старомодную обратную передачу ASP.NET для выполнения каких-либо задач, и когда обратная передача завершена, хеш исчезает:

http://mysite.com/foo/home

... так что меня утащили в другую вкладку. Не хорошо.

Это веб-сайт (не MVC), использующий .NET 4.0. Как видите, я использую маршрутизацию URL.

Есть ли способ сказать ASP.NET, чтобы сохранить хэш в URL после обратной передачи?

Ответы на вопрос(3)

Проблема в том, что постбэк переходит на URL текущей страницы, который задается в действии формы на странице. По умолчанию этот адрес без #hash в asp.net, и он автоматически устанавливается asp.net, вы не можете его контролировать.

Вы можете добавить #hash к атрибуту action формы с помощью javascript:

document.getElementById("aspnetForm").action += location.hash

или, если обновление действия с хэшем уже в нем:

var form = document.getElementById("aspnetForm");
form.action = form.action.split('#')[0] + location.hash

просто убедитесь, что вы выполнили этот код в window.load и указали правильный идентификатор

 Herb Caudill08 окт. 2010 г., 15:15
Спасибо, я попробую.

У меня есть другое решение, реализованное и протестированное с Chrome, IE и Safari.

Я использую объект "localStorage", и предполагается, что работают все браузеры, которые поддерживают localStorage.

В событии click вкладки я сохраняю значение currentTab в локальном хранилище.

$(document).ready(function() {
        jQuery('.ctabs .ctab-links a').on('click', function(e) {
            var currentAttrValue = jQuery(this).attr('href');
            localStorage["currentTab"] = currentAttrValue;

            // Show/Hide Tabs
            jQuery('.ctabs ' + currentAttrValue).show().siblings().hide();

            // Change/remove current tab to active
            jQuery(this).parent('li').addClass('active').siblings().removeClass('active');

            e.preventDefault();
        });
        if (localStorage["currentTab"]) {
            // Show/Hide Tabs
            jQuery('.ctabs ' + localStorage["currentTab"]).show().siblings().hide();
            // Change/remove current tab to active
            jQuery('.ctabs .ctab-links a[href$="' + localStorage["currentTab"] + '"]').parent('li').addClass('active').siblings().removeClass('active');
        }
    });

Я пытался поставить код отОтвет Виллема в функцию JS, которая вызывается каждый раз, когда активируется новая вкладка. Это не сработало, потому что продолжало добавлять дополнительные#hash часть к URL каждый раз, когда я переключал вкладки.

Мой URL в итоге выглядел какhttp://myurl.example.com/home#tab1#tab2#tab3#tab2 (так далее.)

Я немного изменил код, чтобы удалить все существующие#hash компонент из URL в<form> элементаaction атрибут, прежде чем добавлять на новый. Он также использует jQuery для поиска элемента.

$('.nav-tabs a').on('shown', function (e) {
    // ensure the browser URL properly reflects the active Tab
    window.location.hash = e.target.hash;

    // ensure ASP.NET postback comes back to correct tab
    var aspnetForm = $('#aspnetForm')[0];
    if (aspnetForm.action.indexOf('#') >= 0) {
        aspnetForm.action = aspnetForm.action.substr(0, aspnetForm.action.indexOf('#'));
    }
    aspnetForm.action += e.target.hash;
});

Надеюсь, это поможет кому-то!

 modiX12 авг. 2016 г., 12:21
Пожалуйста, будьте осторожны,action тег будет обновляться при использованииUpdatePanelТаким образом, вы должны сделать это вEndPostbackRequest Событие javascript тоже.

Ваш ответ на вопрос