2013-10-21 150 views
0

重定向时,我有如下声明:传递视图模型在ASP.NET MVC 4

return Redirect(this.Request.UrlReferrer.AbsolutePath); 

这个重定向到呼叫者视图。它的工作好了,但现在我需要返回视图模型重定向时,这样的事情(这是错误的):

return Redirect(this.Request.UrlReferrer.AbsolutePath(item)); 

所以,我怎么能做到这一点?

我想这样做,因为我有一个jqrid,其中一列提供一些操作,编辑和删除行。所以如果用户点击编辑,我从传递给数据库的ID中检索一些数据。然后,一旦我得到这些数据,我填充一个视图模型为了更新视图中的一些文本框,所以我需要在重定向时传递视图模型。

下面我控制器代码:

public ActionResult Edit(int id) 
    {    
     ItemViewModel item = new ItemViewModel(); 
     using (DBContext context = new DBContext()) 
     { 
      Items itemToModify = context.Items.Single(i=> i.ItemId == id); 

      item.Desc = itemToModify.Desc; 
      item.Name = itemToModify.Name; 
     } 

     return Redirect(this.Request.UrlReferrer.AbsolutePath, item); <-- how to do this  
    } 
+1

你为什么不使用RedirectToAction( “行动”,“控制器“,new {paramName = item}); ?在你的控制器中做html重定向是一个糟糕的主意。 – Jared

+0

坏主意?这取决于你想要做什么。我需要返回一个与MVC推断控制器不同的视图。您提出的解决方案是重定向到特定控制器内的操作,但我不希望这样。我想从控制器返回到同一个视图,我的意思是,从我调用此控制器的视图中,然后在此控制器完成它必须做的操作后,我需要保留在同一页面中并更新视图中的某些字段所以我需要通过视图模型。 – user304602

+0

你需要ajax电话然后 –

回答

5

您可以使用TempData

在你的控制器

public ActionResult Action1() 
{ 
    ItemViewModel item = new ItemViewModel(); 
    TempData["item"] = item; 
    return Redirect("Action2"); 
} 

public ActionResult Action2() 
{ 
    ItemViewModel item = (ItemViewModel)TempData["item"]; 

    //Your Code 
} 
+0

在使用TempData之后,清除它是否是好习惯。处置? – JoshYates1980

+0

@ JoshYates1980,在下一个请求完成后,放入TempData的任何内容都将被丢弃。所以不需要处理 – Satpal

+0

在此处观看“后退按钮”。你想要使用“item = TempData [”item“]作为ItemViewModel .......并且如果它是空的...重定向某处......... – granadaCoder

相关问题