Как удалить хэш-параметры из URL в контроллере ASP.NET, чтобы вернуться к корневому uri в приложении Angular.JS?

0

Я создаю страницу Angular.JS внутри приложения ASP.NET MVC5 С#, и я хотел бы удалить # и конечный путь из URL-адреса при новой загрузке страницы или обновлении страницы браузера.

Например: www.example.com/calculator#/step2 Я бы хотел, чтобы он вернулся к www.example.com/calculator на странице обновления.

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

Всякий раз, когда страница перезагружается, она вызывает мой контроллер калькулятора ASP.NET, поэтому моя идея заключается в том, что сервер может сбросить URL-адрес?

Внутри моего контроллера калькулятора ASP.NET у меня есть:

public class CalculatorController : Controller
{
    // GET: Calculator
    public ActionResult Index()
    {
        // check for # sign and remove it and trailing path from URL.
        // or simply make the path "/calculator" every time.
        return View();
    }
}

Есть простой способ сделать это? Я новичок в Angular.JS, поэтому, если есть решение Angular.JS для этой проблемы, я тоже хотел бы услышать это.

  • 2
    Строка после хэша в URL не отправляется на сервер при запросе страницы, поэтому вы не можете использовать такие правила перенаправления. Это только на стороне клиента, вы должны справиться с этим под углом.
  • 1
    Используйте разрешение в маршрутизаторе, которое проверяет службу, где вы можете отслеживать шаги. Если шаг 1 не завершен в обслуживании, выполните угловое перенаправление на этот шаг. Также можно рассмотреть возможность использования localStorage, чтобы пользователю не пришлось начинать все сначала
Показать ещё 2 комментария
Теги:
asp.net-mvc

1 ответ

0
Лучший ответ

Используя совет полезных комментариев, я написал решение для моего вопроса. Как и davcs86, строка после хэша может обрабатываться только на стороне клиента.

Используя Angular.JS и resolve как предложил charlietfl, вот что я придумал:

var myApp = angular.module("app-calculator", ["calculatorControls", "ngRoute"])
    .config(function ($routeProvider) {

        $routeProvider.when("/", {
            controller: "termsController",
            controllerAs: "vm",
            templateUrl: "/content/templates/termsView.html"
        });

        $routeProvider.when("/condition", {
            controller: "conditionController",
            controllerAs: "vm",
            templateUrl: "/content/templates/conditionView.html",
            resolve: {
                validate: function ($location, Data) {
                    if (!Data.terms) {
                        $location.path('/');
                    }
                }
            }
        });

        $routeProvider.otherwise({ redirectTo: "/" });

    });

В основном, я использую resolve: { validate:... } чтобы проверить, выполнено ли мое поле Data.terms. Если значение не было установлено (в случае обновления страницы браузера, которое сбрасывает данные), он отправит перенаправление обратно на корневую страницу с помощью $location.path('/'); , В противном случае, если Data.terms был установлен, он загрузит запрошенную страницу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню