使用Session或TempData将值从一个控制器传递到另一个控制器?

时间:2017-11-30 11:59:48

标签: asp.net asp.net-mvc

我现在已经集成了支付网关,在成功URL上我希望将一些数据从一个控制器传递到另一个控制器但是它不能正常工作它有时显示空值,所以我必须使用而不是Session或TempData。

public void Index(UserRegistreModel model)
{        
    TempData["model2"]= model;
redirecturl += "&return=" + ConfigurationManager.AppSettings["SuccessURL"].ToString();
}

public ActionResult AnotherControllerMethod(UserRegistreModel model)
{
UserRegistreModel add = (UserRegistreModel) TempData["model2"];
//not getting any values
}

2 个答案:

答案 0 :(得分:1)

您正在向Temp Data添加用户类型类,但是您正在提取UserRegistreModel类型,这就是为什么这是空的,请使用如下: -

public void Index(User model)
{        
  TempData["model2"]= model;
  redirecturl += "&return=" + 
  ConfigurationManager.AppSettings["SuccessURL"].ToString();
}

public ActionResult AnotherControllerMethod(User model)
{
   User add = (User) TempData["model2"];
  //not getting any values
}

答案 1 :(得分:0)

你如何传递数据?它是转发还是重定向?转发将获取您的请求对象的当前数据,因为它是相同的请求,但您的客户端不会更改您的URL。

如果你正在重定向那么它是一个新的请求。在这种情况下,响应将首先转到客户端(浏览器),然后转到新控制器。由于这是一个新请求,它将不会有来自您的呼叫控制器的旧数据。

Spring有一个特殊类型的pojo,名为RedirectAttributes。您可以在此处为此类要求添加FlashAttribute。检查.net

中的类似内容