2013-05-16 28 views
0

我需要两项行动结果之间传递一些数据,所以我想我会尝试TempData(我真的很新的MVC这样忍耐一下)。这是我试过的:int为null但TempData不是?

public ActionResult Edit(Companies companies, HttpPostedFileBase file) 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        if (file != null) 
        { 
         //Do stuff with file, save changes to database etc. 

         TempData["Companies"] = companies; 

         return RedirectToAction("bgcTest2", "Companies"); 

现在存储了临时数据。并检索它:

public ActionResult bgcTest2(string BolagsID, Companies companies) 
     { 
      try 
      { 
       companies = TempData["Companies"] as Companies; 
       int test = companies.BolagsID; 

现在,这里的问题; companies.BolagsID有一个值,但test始终为空。为什么?我该如何解决它?

编辑:

我注意到一个相当奇怪的事;当试图达林Dimitrovs建议,并可能做我尝试藏汉的时候,如果我把一个断点只在它返回空值它不会破坏后才行线。就好像该行被注释掉并且根本不执行一样。欢迎来到暮光之城。

EDIT2:

以2:

[HttpPost] 
     public ActionResult Edit(Companies companies, HttpPostedFileBase file) 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        if (file != null) 
        { 
         // non related stuff 

         return RedirectToAction("bgcTest2", "Companies", new {BolagsID = companies.BolagsID}); 

和:

[Authorize] 
     public ActionResult bgcTest2(int BolagsID) 
     { 
      try 
      { 
       int test = BolagsID; 

我仍然得到的是 “测试并不在当前的背景下存在”。

EDIT3:

取2个工作正常。我的变量是null,因为我从来没有在任何地方使用它们。我认为我一次只能采取一步,但很明显,在某些情况下,您必须采取几个步骤才能看到它们中的任何一个。

教训:一定要使用声明的变量,否则会null

+0

如何'test'为null,它'int'不是'诠释?'? – Habib

+0

我不知道,但是在调试时,“int test”中的“添加监视”给了我null。这是奇怪的事情。 –

+0

您是否检查天气公司从TempData [“Companies”]有一些价值? –

回答

2

我会建议,因为它依赖于会话你不使用的TempData。如果你需要的是这个BolagsID然后简单地把它作为参数:

public ActionResult Edit(Companies companies, HttpPostedFileBase file) 
{ 
    if (ModelState.IsValid) 
    { 
     try 
     { 
      if (file != null) 
      { 
       //Do stuff with file, save changes to database etc. 
       return RedirectToAction("bgcTest2", "Companies", new { BolagsID = companies.BolagsID }); 

然后:

public ActionResult bgcTest2(int bolagsID) 
{ 
    ... use the bolagsID here directly 
} 

不幸的是你不能通过使用这种方法复杂的对象。但是,您可以将此对象保存在数据存储中,并仅将该ID传递给目标控制器操作,以便在重定向后从此数据存储中检索该对象。

+0

使用你的例子仍然给我“名字'测试'在当前上下文中不存在”,当看着它。( –

+0

)你在哪里看到'test'在我的回答中发布的代码示例中? –

+0

哦,对不起,你在哪里写的“...直接在这里使用bolagsID”我试过'int test = bolagsID;',只是看看我是否会得到一个值 –

相关问题