我的MVC项目中有一个“登录”视图和一个“重置密码”视图。
成功重置密码操作后,我会重定向回“登录”视图。
我希望“登录”视图能够检查是否刚刚成功重置密码,以便向用户显示确认/成功消息。什么是最好的机制?
我尝试从重置视图添加到视图包和视图数据,并让登录视图查看是否有与重置包或数据相关的值,但重定向后包重置。
答案 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);