如何从mvc中另一个控制器的视图中调用HttpPost ActionResult

时间:2015-04-20 04:44:55

标签: asp.net-mvc

我想在Home Index视图中显示我的登录表单, 当用户点击登录按钮时,我想通过我的帐户控制器中的一个名为(登录)的操作结果对他进行身份验证。

这是我在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?

3 个答案:

答案 0 :(得分:0)

除了额外的结束</div>标记,它似乎不属于任何开始标记,您的观点似乎有效。

最有可能发生的事情是您使用AuthorizeAttribute

修饰了AccountController
[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,但位置地址不会更改

如果在你的家庭控制器索引操作中,为视图设置数据,它也将在登录操作中运行
如果您想要更改位置,请使用重定向并传递一些参数