如何通过重定向到操作将参数或值从一个视图传递到另一个视图?

时间:2011-12-05 19:34:42

标签: model-view-controller redirecttoaction

我的MVC项目中有一个“登录”视图和一个“重置密码”视图。

成功重置密码操作后,我会重定向回“登录”视图。

我希望“登录”视图能够检查是否刚刚成功重置密码,以便向用户显示确认/成功消息。什么是最好的机制?

我尝试从重置视图添加到视图包和视图数据,并让登录视图查看是否有与重置包或数据相关的值,但重定向后包重置。

3 个答案:

答案 0 :(得分:2)

我使用Jon Krugers Blog中的这种风格:

[PassParametersDuringRedirect]
public class AccountController : Controller
{
    [AcceptGet]
    public ActionResult Index(IndexPresentationModel model)
    {
        return View(model);
    }

    [AcceptPost]
    public ActionResult Save(SaveUpdateModel model)
    {
        // save the information

        var presentationModel = new IndexPresentationModel();

        presentationModel.Message = model.Message;

        return this.RedirectToAction(c => c.Index(presentationModel));
    }
}

然后是辅助方法来实现这一点:

protected RedirectToRouteResult RedirectToAction<T>(Expression<Action<T>> action)
    where T : Controller
{
    return ControllerExtensions.RedirectToAction(this, action);
}

答案 1 :(得分:2)

您可以将其存储在会话变量

在您的密码重置控制器上

if (login == "success")
{
     Session["loginStatus"] = "success";
}else{
     Session["loginStatus"] = "failed";
}

在您的登录控制器上

public actionresult Login()
{
    if (Session["loginStatus"] == "success")
    {
         return RedirectToAction("ActionName", "Controller");
    }

}

虽然会话变量并不总是存储信息的最佳方式。您可以随时创建一个具有可以跨站点访问的属性的类。

ViewData和ViewBag似乎在控制器调用之间被清除,但Session应该贯穿整个Session。希望这有效。

答案 2 :(得分:1)

TempData也有效;虽然不是最漂亮的解决方案。 调查我计划做的rism引用的解决方案可能是值得的。

TempData.Add("ForgotPassword", true);
TempData.Add("UserEmail", model.Email);