Я хочу создать форму входа в систему, которая будет отображаться на боковой панели на каждой странице моего сайта.Если пользователь вводит неверного пользователя / пароль, я хочу, чтобы над этой формой отображались ошибки (оставшаяся часть страницы осталась прежней), и если он успешно вошел в систему, я хочу, чтобы форма изменилась на списокинформации о пользователе (опять же, остальная часть страницы такая же, как и до входа в систему).Я использую проект веб-приложения MVC 3 с шаблоном интернет-приложения по умолчанию.У меня есть это:
_Layout.cshtml
@{
if (User.Identity.IsAuthenticated)
{
Html.RenderAction("ShowUserInfo", "User");
}
else
{
Html.RenderAction("LogIn", "User");
}
}
UserController
[ChildActionOnly]
public PartialViewResult ShowUserInfo()
{
// populate loggedInInfo from database based on
// User.Identity.Name
return PartialView("_LoggedInInfo", loggedInInfo);
}
private ActionResult RedirectToPrevious(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("index", "");
}
}
[ChildActionOnly]
public PartialViewResult LogIn()
{
return PartialView("_LogInForm");
}
//
// POST: /User/LogIn
[HttpPost]
public ActionResult LogIn(LogInModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToPrevious(returnUrl);
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
return RedirectToPrevious(returnUrl);
}
_LogInForm
@model MyProject.Models.LogInModel
<h2>Login</h2>
<p>
Please enter your username and password. @Html.ActionLink("Register", "register", "user") if you don't have an account.<br />
@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
</p>
@using (Html.BeginForm("LogIn", "user")) {
html stuff
}
Это работает почти так, как задумано, за исключением того, что когда я ввожу неправильное имя пользователя / пароль, страница просто перезагружается с пустой формой, и ошибка не отображается.Я пробовал и другие вещи, но я либо получаю ошибки о том, что я не могу выполнить перенаправление с частичного представления, либо я получаю частичное представление (с отображением ошибок), отображаемое как целое представление, поэтому оно отображается как единое целоестраница, отдельно от остальной части сайта.Если я вхожу правильно, все работает нормально.
Как я могу получить правильное отображение ошибок над формой?Я бы предпочел не использовать Ajax или JQuery для этого.