4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
1

Сделать кнопку "Назад" без JS

18.06.2023, 17:58. Показов 687. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Допустим, есть страница Index, на ней кнопка Stuff, на странице Stuff кнопка Users. Вверху на LayOut расположена кнопка "Назад".
Пока что есть такое решение: создан сервис, который хранит в своих пропертях имя контроллера и имя экшна, он инжектится в LayOut.cshtml при нажатии на кнопку layOut происходит вызов кнотроллера и экшна, которые в данный момент хранятся в свойствах сервиса.
При вызове действий контроллеров обновляются свойства сервиса. Например, при вызове действия Users.Users проиходит:
C#
1
2
3
4
5
6
7
8
9
        public async Task<IActionResult> Users()
        {
            _backwardService.BackController = "Stuff";
            _backwardService.BackAction = "Stuff";
 
            var usersViewModel = GetUsersListForView();
 
            return View("~/Views/Stuff/Users.cshtml", usersViewModel);
        }
Таким образом, кнопка назад всегда знает, что она должна вызвать, благодаря тому, что это знаю я.
Я знаю, что со страницы "Users" при нажатии "Назад" нужно попасть на страницу "Stuff". Как меня убрать из этой цепочки (т.е. мне не нравится хард-код)?

Мне нужно, чтобы кнопка назад получала предыдущий адрес (грубо говоря). Мои попытки продвижения в этой области привели к созданию убер-сервиса, который должный знать обо всех контроллерах и хранить в себе стек вызовов их действий, в зависимости от состояния стека он должен вызывать те или иные действия тех или иных контроллеров. Мне кажется, это не совсем правильно.

Добавлено через 4 часа 28 минут
Ладно, сдаюсь. Вставил в страницу скрипт:
Javascript
1
2
3
4
5
<script>
    function goBack() {
        window.history.back();
    }
</script>
Работает прекрасно, аж слезы наворачиваются.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2023, 17:58
Ответы с готовыми решениями:

Кнопку 'Назад' на панели инструментов сделать недоступной.
Как можно сделать кнопку 'Назад' на панели инструментов IE недоступной! Заранее благодарен.

Как сделать кнопку назад в боте Telegram на Python (TeleBot)?
Мне нужно, чтобы при выборе своего возраста была возможность вернуться назад в главное меню назад...

Сделать чтобы при нажатие на кнопку в textview дата листалась назад
Здравствуйте, есть вопрос. как сделать чтобы при нажатие на кнопку в textview дата листалась...

Нужно сделать кнопку "назад" для сайта
Нужно сделать ссылочку &quot;назад&quot;, но только чтобы она появлялась только тогда, когда есть куда...

Сделать в меню кнопку "назад"
немогу сделать кнопку &quot;назад&quot; в меню в меню &quot;Выбрать уровень&quot; заходяы в любой из уровней нужно...

3
HF
1193 / 784 / 186
Регистрация: 09.09.2011
Сообщений: 2,398
Записей в блоге: 2
18.06.2023, 18:21 2

Не по теме:

Цитата Сообщение от Vanka03 Посмотреть сообщение
Работает прекрасно, аж слезы наворачиваются.
Иногда нужно признать, что общепринятое решение - действительно лучшее. ;)



Добавлено через 10 минут
Цитата Сообщение от Vanka03 Посмотреть сообщение
Допустим, есть страница Index, на ней кнопка Stuff, на странице Stuff кнопка Users. Вверху на LayOut расположена кнопка "Назад".
C#
1
2
            _backwardService.BackController = "Stuff";
            _backwardService.BackAction = "Stuff";
Наверное потому что вы нарушаете смысл этого действия. Назад - это именно назад, на предыдущее действие. А вы "захардкодили", что здесь назад - это скорее "перейти на общий список".
А такое вроде бы решается просто. Users - метод Stuff контроллера (если я правильно понял). А если на вьюшке Users сделать Url.Action("Index"), то по умолчанию роут будет именно в Stuff/Index. И нам не нужно даже знать о контроллере.
(вот не понятно почему у вас BackAction Stuff. Видимо это даже не индекс. Ну тут видимо ещё и более глубокое погружение через на один уровень?)

И если бы меня "припекло" сделать такой контролируемый возврат, то я бы просто в методе считывал страницу с которой был переход, а в куки бы кидал это значение. Тогда в другом методе, куда мы пришли, можно считать это значение и сделать "Галя, у нас возврат!" на нужный адрес.

Но в итоге, вы признали что контролировать это не нужно. То есть переход "исторический", а значит браузер справится с этим идеально.
1
4 / 4 / 0
Регистрация: 01.11.2013
Сообщений: 216
18.06.2023, 18:37  [ТС] 3
Цитата Сообщение от HF Посмотреть сообщение
А вы "захардкодили", что здесь назад - это скорее "перейти на общий список"
Да, Вы правы, у меня получилось не "Назад", а "Вверх".
Цитата Сообщение от HF Посмотреть сообщение
вот не понятно почему у вас BackAction Stuff
Action Stuff.Stuff возвращает вьюху Stuff, на ней кнопка Users, она ссылается на Action Users.Users
Цитата Сообщение от HF Посмотреть сообщение
в методе считывал страницу с которой был переход
Я пытался это делать с помощью HttpContext["Refers"] (пишу примерно, точное местоположение Refers не помню), но у меня не было в контекста такого ключа почему-то.
0
Эксперт .NET
1952 / 1413 / 335
Регистрация: 15.06.2012
Сообщений: 5,310
Записей в блоге: 3
22.06.2023, 00:49 4
Можно так:
- вводите атрибут PrevPage или как-то так, и вешаете на action которые возращают именно страницу, а не ajax-запрос
- при предварительном обработке запроса, смотрим в сессию. Если там уже есть значение, вытаскиваем его в context и пишем текущий url
- при обработке отображения страницы, смотрим в context. если там есть условный ранее вычитаный url -- значит для "назад" прописываем его
- офигиваем от поведения, когда пользователь открыл больше одной страницы

По идеи можно и не через атрибут, тут главное как-то различать запросы которые нужно запоминать, и которые игнорим. Можно хранить не в сессии, а как предложено выше в куках (проблемы с несколькими страницами по идеи тоже останутся)

С history.back есть нескольки другой ньюанс: если вы пришли с другого сайта, то вас вернет на тот сайт, а не где-то выше по уровню в вашем. Ещё браузер может вернуть кеш, а не заново перегрузить страницу. Но зато лишаетесь головной боли по поводу "как" и в 99% случаев работает как ожидается (наверное).
0
22.06.2023, 00:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2023, 00:49
Помогаю со студенческими работами здесь

Сделать так чтобы кнопка "Назад" еще и восстанавливала на листе удаленную кнопку со всеми параметрами и ссылками
Всем привет. Продолжаю грызть науку VBA. Подскажите. Есть документ Word, на листе создана...

Как сделать кнопку без границы?
Подскажите, пожалуйста, как сделать кнопку без границы? Вставил в неё свою иконку, а с этой нелепой...

Сделать загрузку инфы из файла без нажатия на кнопку
Добрый день! Бьюсь уже второй день, не могу реализовать одну идею. Исходные данные: есть кнопка,...

Сделать загрузку инфы из файла без нажатия на кнопку
Добрый день! Бьюсь уже второй день, не могу реализовать одну идею. Исходные данные: есть кнопка,...

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

Сделать кнопку, которая будет не отвечать на нажатие без свойства Enabled?
Можно ли каким-то образом сделать кнопку, которая будет не отвечать на нажатие без св-ва Enable?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru