Моя проблема заключается в том, что при попытке настройки маршрутизации стандартного проекта ASP.NET MVC и AngularJS, а именно "Вход/Регистрация", при нажатии на ссылку происходит бесконечный запуск angular-контроллера, что ведет к зависанию браузера.
AAngScript.js
(function () {
var AAngScript = angular.module('AAngScript', ['ngRoute']);
/* some stuff */
function RegisterController ($location, RegistrationFactory) {
// vm as in view-model
var vm = this;
vm.registerForm = {
emailAdress: '',
password: '',
confirmPassword: '',
registrationFailure: false
};
vm.register = function () {
var result = RegistrationFactory($scope.registerForm.emailAdress, $scope.registerForm.password, $scope.registerForm.confirmPassword);
result.then(function (result) {
if (result.success) {
$location.path('/routeOne');
} else {
$scope.registerForm.registrationFailure = true;
}
});
}
}
//some stuff
function RegistrationFactory($http, $q) {
return function(emailAdress, password, rememberMe) {
var deferredObject = $q.defer();
$http.post(
'/Account/Register', {
Email: emailAdress,
Password: password,
ConfirmPassword: confirmPassword
}
).
success(function (data) {
if (data == "True") {
deferredObject.resolve({ success: true });
} else {
deferredObject.resolve({ success: false });
}
}).
error(function () {
deferredObject.resolve({ success: false });
});
return deferredObject.promise;
}
};
//some stuff
})();
Частичное представление _Layout.cshtml:
<!DOCTYPE html>
<html ng-app="AAngScript">
<head>
.....
</head>
<body>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<script src="~/Scripts/angular.min.js"></script>
<script src="~/Scripts/angular-route.min.js"></script>
<script src="~/Scripts/AAngScript.js"></script>
...
<ul class="nav navbar-nav navbar-right">
<li><a href="/#!/login">Log In</a></li>
<li><a href="/#!/register">Register</a></li>
</ul>
...
<div class="container body-content">
@RenderBody()
<div ng-view></div>
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
Register.cshtml:
<div class="row">
<form ng-submit="register()">
<div class="form-group">
<label for="emailAdress">Email</label>
<input id="emailAdress" type="email" ng-model="registerForm.emailAdress" required pattern="{6,30}" autofocus/>
</div>
<div class="form-group">
<label for="password">Password</label>
<input id="password" type="password" ng-model="registerForm.password" required pattern="{6,30}" />
</div>
<div class="form-group">
<label for="confirmPassword">Confirm password</label>
<input id="confirmPassword" type="password" ng-model="registerForm.confirmPassword" required pattern="{6,30}" />
</div>
<div class="form-group">
<input type="submit" value="Register" class="btn btn-success" />
</div>
</form>
</div>
AccountController.cs:
//
[AllowAnonymous]
public ActionResult Register()
{
return View();
}
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
public async Task<bool> Register(RegisterViewModel model)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded) return false;
await SignInManager.SignInAsync(user, false, false);
return true;
}
AAngScript.js сделан в соответствии с этим гайдом. Дебаг в браузере показывает, что постоянно запускается RegisterController, что вызывает ошибку вида: Error: too much recursion, но я никак не могу понять, как ограничить вызов контроллера только одним разом.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники