从[HttpGet]动作重定向到[HttpPost]动作 - MVC3

时间:2013-01-17 13:55:31

标签: asp.net-mvc asp.net-mvc-3 web-applications razor web

我想从同一控制器中的[HttpPost]操作重定向到[HttpGet]操作。

有可能吗?

我正在尝试不为Login重写相同的代码,因为它是一个复杂的,而不是典型的登录功能

这是我的代码:

[HttpGet]
public ActionResult Login(){
    return View();
}

[HttpPost]
public ActionResult Login(LoginModel model)
{
    //search user and create sesion
    //...

    if (registered)
        {
        return this.RedirectToAction("Home","Index");                      
        }else{
        return this.RedirectToAction("Home", "signIn");
    }
}

[HttpGet]
public ActionResult signIn(){
    return View();
}

[HttpGet]
public ActionResult signInUserModel model)
{
    //Register new User
    //...
    if (allOk)
        {
        LoginModel loginModel = new LoginModel();
            loginModel.User = model.User;
            loginModel.password = model.password;

            //next line doesn't work!!!!!
        return this.RedirectToAction("Home","Login", new { model = loginModel); 

        }else{
        //error
        //...

    }

}

任何帮助都将不胜感激。

由于

3 个答案:

答案 0 :(得分:2)

您可以从Post方法重构核心登录逻辑,然后从两个位置调用该新方法。

e.g。假设您创建一个LoginService类来处理登录某人的情况。这只是从您的操作中使用它的情况,因此无需从一个操作重定向到另一个

答案 1 :(得分:2)

您可以从方法名称

返回不同的视图
public ActionResult signInUserModel model)
{
    ...
    return View("Login", loginModel);
}

有点晚了,但我遇到了同样的问题......

答案 2 :(得分:1)

有可能。所有操作必须位于同一控制器中。

public ActionResult Login(){
    return View();
}

[HttpPost]
public ActionResult Login(LoginModel model)
{
    //search user and create sesion
    //...

    if (registered)
    {
        return RedirectToAction("Index");
    }

    return View(model);
}

public ActionResult SignIn(){
    return View();
}

[HttpPost]
public ActionResult SignIn(UserModel model)
{
    //Register new User
    //...
    if (allOk)
    {
        return RedirectToAction("Login");
    }

    return View(model);
}