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