Страница аккаунта открывается как обычно:
public ActionResult Index()
{
return View();
}
это позволяет отобразить следующий шаблон представления: (потому что на данный момент CurrentUser отсутствует, 'user' равен null, поэтому он запускается Html.RenderAction("LogOn", "Account");
)
<% var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];
if (user == null || user.IsLoggedIn == false || user.IsPublic)
{
Html.RenderAction("LogOn", "Account");
} else { %>
<span class="PageNavLink">
<% Html.RenderPartial("AccountMenu"); %>
</span>
<div id="IndexContent" class="IndexContent">
<% Html.RenderAction("UserList", "Account"); %>
</div>
<% } %>
поэтому я ввожу имя пользователя и пароль, и запускается следующий код (и пользователь добавляется в сеанс для последующего восстановления), и меня перенаправляют на нужную мне страницу:
(конкретно return Redirect(redirect);
)
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(WAPConfigUser user)
{
if (!ValidateLogOn(user.UserName, user.Password))
{
return PartialView();
}
else
{
string redirect = "";
if (Request.QueryString["ReturnUrl"] != null)
{
redirect = Request.QueryString["ReturnUrl"].ToString();
return Redirect(redirect);
}
else
{
return RedirectToRoute("Default");
}
}
}
Затем я выхожу из системы и перенаправляюсь на экран входа в систему:
public RedirectToRouteResult LogOut()
{
Session.Remove("CurrentUser");
return RedirectToAction("Index", "Account");
}
Когда я снова набираю свое имя пользователя и пароль, первая точка останова, которая получает удар, выглядит так: (кажется, что при попытке загрузить всю страницу)
public ActionResult Index()
{
return View();
}
следующая точка останова - это строка return RedirectToRoute("Default");
:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(WAPConfigUser user)
{
if (!ValidateLogOn(user.UserName, user.Password))
{
return PartialView();
}
else
{
string redirect = "";
if (Request.QueryString["ReturnUrl"] != null)
{
redirect = Request.QueryString["ReturnUrl"].ToString();
return Redirect(redirect);
}
else
{
return RedirectToRoute("Default");
}
}
}
но если я пошагово выполняю код, мой маршрут по умолчанию никогда не будет выполнен. Когда я перехожу к следующей строке, она снова переходит к следующей строке Html.RenderAction("LogOn", "Account");
в представлении индекса моего AccountController, и это (только пользовательский элемент управления) возвращается в браузер:
<% var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];
if (user == null || user.IsLoggedIn == false || user.IsPublic)
{
Html.RenderAction("LogOn", "Account");
} else { %>
<span class="PageNavLink">
<% Html.RenderPartial("AccountMenu"); %>
</span>
<div id="IndexContent" class="IndexContent">
<% Html.RenderAction("UserList", "Account"); %>
</div>
<% } %>
Здесь есть несколько вещей, которые я не понимаю.
- Почему
RedirectToRoute("Default")
не перенаправляет меня на маршрут по умолчанию?
- Почему пользователь теряет значение NULL после того, как я добавил его в сеанс, когда я вошел во второй раз? (т. е. строка
var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];
должна возвращать зарегистрированного пользователя, которого я только что добавил в сеанс, предшествующий этому. Вместо этого эта строка не попадает в точку останова, поэтому, похоже, есть еще один пользователь, НЕ вошедший в систему. Он выполняет строку, которой не должно быть, на странице, которой не должно быть!
Я знаю, что меня, вероятно, застрелят за добавление пользователя в сессию, но кто-нибудь знает, что происходит? Если потребуется дополнительная информация, задайте вопрос, и я обновлю вопрос.
Спасибо
Dave