質問をする前に、この演習の目的は研究/概念実証であることを明確にさせてください。そのため、設計を改善する方法や、これを達成するためのより簡単な方法についての回答は高く評価されていますが、目的を達成するのに役立たない可能性があります。 .
ASP .Net MVC 4 アプリケーションのテンプレートを変更しているため、ログイン コントロールを含む部分ビューのみを更新し、ページの残りの部分はそのままにしておく ajax 要求でログイン機能が実装されます。
これまでのところ、私が行ったことは次のとおりです。
部分ビューにフォームを追加して、投稿してアクション リンクをボタンに置き換えられるようにしました。
@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl }))
{
@Html.ValidationSummary(true)
if (Request.IsAuthenticated)
{
<p>
Hello, @Html.ActionLink(User.Identity.Name, "ChangePassword", "Account", routeValues: null, htmlAttributes: new {@class = "username", title = "Change password"})!
@Html.ActionLink("Log off", "LogOff", "Account")
</p>
}
else
{
<ul>
<li>@Html.LabelFor(m => m.UserName)</li>
<li>@Html.TextBoxFor(m => m.UserName)</li>
<li>@Html.LabelFor(m => m.Password)</li>
<li>@Html.PasswordFor(m => m.Password)</li>
<li><input class="loginLink loginButton" type="button" value="Log in"/></li>
<li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new {id = "registerLink"})</li>
</ul>
}
}
アクションを次のように変更しました
[AllowAnonymous]
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
ActionResult result = View("_LoginPartial", model);
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl))
{
result = Redirect(returnUrl);
}
else
{
result = View("_LoginPartial", model);
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
return result;
}
そして、私はこの小さなJavascriptファイルを作成しました
var login = {
callLogin: function () {
var userName = $("#UserName").val();
var password = $("#Password").val();
var data = { UserName: userName, Password: password };
$("#login").load("/Account/Login", data);
}
};
$(document).ready(function () {
$(".loginButton").click(login.callLogin);
});
ログイン自体は機能します。POST アクション メソッドが呼び出され、資格情報が検証されます。問題は、部分ビューが更新されていないことです。ユーザーがログインしているかのように部分ビューを表示できるように、別のページに移動して投稿を強制的に戻す必要があります。
これを達成するために不足している要素は何でしょうか?
ありがとうございました。