По какой-то причине один из моих методов Html.Action() бросает исключение StackOverflowException, которое только улавливается, когда я отлаживаю экземпляр веб-сервера после того, как он застревает и перестает отвечать. Все, что я получаю, это:
Исправление System.StackOverflowException необработанное
Невозможно оценить выражение, поскольку текущий поток находится в переполнении стека состояние.
Линия, которая бросает исключение, такова:
<div id="userInfoSummary">@Html.Action("Summary", "User")</div>
Это происходит, когда я вхожу в систему, а затем перенаправляется на домашнюю страницу (что никогда не происходит, потому что оно застревает.
Здесь, как я проверяю, был ли пользователь зарегистрирован или нет, чтобы визуально отобразить представление:
<div id="userPanel">
@if (!SessionManager.CheckSession(SessionKeys.User))
{
<div id="loginForm">@Html.Action("Login", "User")</div>
<div id="registerForm">@Html.Action("Register", "User")</div>
<hr class="greyLine" />
<div id="recentlyViewedItems">
<div id="recentItemsTitle">
<span class="recentItemsIcon"></span><span class="theRecentTitle">Recently Viewed</span>
</div>
</div>
}
else
{
<div id="userInfoSummary">@Html.Action("Summary", "User")</div>
}
</div>
И вот мои ActionMethods:
[HttpPost]
public ActionResult Login(LoginViewModel dto)
{
bool flag = false;
if (ModelState.IsValid)
{
if (_userService.AuthenticateUser(dto.Email, dto.Password, false)) {
var user = _userService.GetUserByEmail(dto.Email);
var uSession = new UserSession
{
ID = user.Id,
Nickname = user.Nickname
};
SessionManager.RegisterSession(SessionKeys.User, uSession);
flag = true;
}
}
if (flag)
return RedirectToAction("Index", "Home");
else
{
ViewData.Add("InvalidLogin", "The login info you provided were incorrect.");
return View(dto);
}
}
public ActionResult Summary()
{
var user = _helper.GetUserFromSession();
var viewModel = Mapper.Map<User, UserInfoSummaryViewModel>(user);
return View(viewModel);
}
Как получить дополнительную информацию об этом исключении? И почему это происходит в первую очередь? Я не думаю, что есть какие-то рекурсивные функции, которые идут бесконечно или бесконечный цикл... Может ли быть так, что я вызываю несколько методов Html.Action() в то же время?