我想在Home Index视图中显示我的登录表单, 当用户点击登录按钮时,我想通过我的帐户控制器中的一个名为(登录)的操作结果对他进行身份验证。
@model Charity.Models.ViewModels.LoginModel
@using (Html.BeginForm("Login", "Account", FormMethod.Post))
{
<div>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</div>
<div>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</div>
<input type="submit" value="Login" />
}
这是我的登录方法:
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
return RedirectToAction("Index", "Admin");
}
else
{
ModelState.AddModelError("", "User or password is incorrect");
}
}
return View();
}
问题是:当凭据正确时,网站会重定向到/ Admin / Index,这没关系。 但是当凭据错误时,网站会重定向到/帐户/登录。我的登录表单不在此地址.. 当凭证错误时,我如何强制登录actionresult重定向到/ Home / Index?
答案 0 :(得分:0)
除了额外的结束</div>
标记,它似乎不属于任何开始标记,您的观点似乎有效。
最有可能发生的事情是您使用AuthorizeAttribute
:
[Authorize]
public class AccountController : Controller
{
/* your code */
}
如果您这样做,则必须修饰不需要AllowAnonymousAttribute
授权的任何操作。这包括应该处理POST事件的版本:
[HttpPost]
[AllowAnonymous]
public ActionResult Login(Models.ViewModels.LoginModel model, string returnUrl = "")
{
/* your code */
}
如果您不使用AllowAnonymousAttribute
修饰POST版本,AuthorizeAttribute
将触发HTTP 401结果,您将被重定向到登录行动。
答案 1 :(得分:0)
这是我对登录方法的实现:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null) // user.IsConfirmed
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If this point is reached , an error has occurred; Show form again .
return View(model);
答案 2 :(得分:0)
在登录时将您的返回视图()更改为
return View("~/Views/Home/Index.cshtml")
视图将是home / index.cshtml,但位置地址不会更改
如果在你的家庭控制器索引操作中,为视图设置数据,它也将在登录操作中运行
如果您想要更改位置,请使用重定向并传递一些参数