2

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

是否可以?

我试图不为登录重写相同的代码,因为它是一个复杂的,而不是典型的登录函数

这是我的代码:

[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
        //...

    }

}

任何帮助,将不胜感激。

谢谢

4

3 回答 3

3

您可以从方法名称返回不同的视图

public ActionResult signInUserModel model)
{
    ...
    return View("Login", loginModel);
}

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

于 2013-12-10T10:26:49.903 回答
2

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

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

于 2013-01-17T14:02:28.157 回答
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);
}
于 2013-01-17T14:05:40.100 回答