Я пытаюсь включить мою регистрационную форму в файл _Layout.cshtml, но у меня с ней несколько проблем.Включая форму входа в главную страницу макета - ASP.NET MVC 3
Прежде всего, когда я предоставляю неправильное имя пользователя и/или пароль, или поля ввода не проходят проверку, вместо отображения сообщений об ошибках в частичном представлении, это делает частичный просмотр занятым всего экрана !
Это частичный вид: http://i.imgur.com/oisCj85.png?1
Это «частичный» вид возвращается, когда что-то пойдет не так с лесозаготовок в: http://i.imgur.com/Uc5Sh2t.png?1
а во-вторых, когда вход в систему является успешным, пользователь выполняет вход в систему, перезагружает страницу, но Javascript в <body onload="loadPage();>
в _Layout.cshtml не выполняет (и как таковой я не могу заставить панель входа снова появляться, потому что она по умолчанию рушилась). EDIT: эта проблема теперь решена, JS не выполнялся, потому что в ней были ошибки. Он ссылается на кнопку, которая показывает только, когда вы не вошли в систему, очевидно, что сломал код, когда вы которые вошли в систему :)
Вот мой код:
_LogOn.cshtml:
@model project_blok_c_groep_13_webshop.Models.LogOnModel
@{
if (Request.IsAuthenticated)
{
<div class="minicolumn">
U bent ingelogd als: @User.Identity.Name
</div>
<div class="minicolumn miniborder">
Click here to log out!
</div>
}
else
{
<div class="minicolumn">
@using (Html.BeginForm("_LogOn", "Account", new { ReturnUrl = Request.QueryString["ReturlUrl"] }))
{
<span style="color:red">@Html.ValidationSummary(true, "Incorrecte gebruikersnaam en/of wachtwoord.")</span>
<fieldset>
Gebruikersnaam:
@Html.TextBoxFor(model => model.Username)
@Html.ValidationMessageFor(model => model.Username)
Wachtwoord:
@Html.PasswordFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
<input type="submit" value="Log-in" />
</fieldset>
}
</div>
}
}
_Layout.cshtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- saved from url=(0014)about:internet -->
<head>
<title>Webshop</title>
<link href="@Url.Content("~/Content/Site.css")" type="text/css" rel="stylesheet" />
<link href='http://fonts.googleapis.com/css?family=Merriweather+Sans' rel='stylesheet' type='text/css' />
<script type="text/javascript">
<!--lots of javascript omitted here-->
</script>
</head>
<body onload="loadPage();">
<div class="maindiv">
<div class="topbar">
</div>
<div id="minibar">
@Html.ActionLink("Log uit", "LogOff","Account")
<a href="/">Home</a>
<a href="#">Catalogus</a>
<a href="#">Winkelwagen</a>
<a href="#">Contact</a>
<a onclick="displayBar();">Account</a>
<div id="visbar">
@Html.Action("_LogOn", "Account")
</div>
</div>
<div class="content">
<div class="sidebar">
@Html.Action("_Menu", "Home")
</div>
<div class="center">
<noscript>
<p>
For full functionality of this site it is necessary to enable JavaScript.
Here are the <a href="http://www.enable-javascript.com/" target="_blank">
instructions how to enable JavaScript in your web browser.</a>
</p>
</noscript>
@RenderBody()
</div>
</div>
<div class="footer">
</div>
</div>
</body>
</html>
И, наконец, AccountController:
public class AccountController : Controller
{
private AuthDBController authDBController = new AuthDBController();
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
/*
* Voor de expandable bar.
*/
public PartialViewResult _LogOn()
{
return PartialView();
}
[HttpPost]
public ActionResult _LogOn(LogOnModel logOnModel, string returnUrl)
{
if (ModelState.IsValid)
{
bool auth = authDBController.isAuthorized(logOnModel.Username, logOnModel.Password);
if (auth)
{
FormsAuthentication.SetAuthCookie(logOnModel.Username, false);
return Redirect(returnUrl ?? Url.Action("Index", "Home"));
}
else
{
ModelState.AddModelError("loginfout", "Incorrecte gebruikersnaam en/of wachtwoord.");
}
}
return PartialView(logOnModel);
}
}
Эти проблемы меня озадачили, я просмотрел множество других подобных вопросов, но никто не ответил. Любая помощь будет принята с благодарностью. Наверное, я не понимаю, как работают частичные представления, перенаправления и прочее.
Добро пожаловать в стек. Ваш вход в систему выполняет запись и рассчитывает на дочернее действие, чтобы вернуть Partial и рассматривать его как частичное. Это сложная архитектура. Я бы рекомендовал: a) использовать JQuery Ajax и вызвать JS-обновление при успешном запуске или b) использовать Ajax.BeginForm и обновить ваш контейнер div. –