Asp.net mvc 4 在ASP.NET MVC 4中重定向时传递viewModel

Asp.net mvc 4 在ASP.NET MVC 4中重定向时传递viewModel,asp.net-mvc-4,Asp.net Mvc 4,我有以下声明: return Redirect(this.Request.UrlReferrer.AbsolutePath); 这将重定向到调用者视图。它工作正常,但现在我需要在重定向时返回一个视图模型,类似这样(它是错误的): 那么我如何才能做到这一点呢 之所以要这样做,是因为我有一个jqrid,其中一列提供了一些操作、编辑和删除行。所以,如果用户单击edit,我将从传递到数据库的id中检索一些数据。一旦我得到这些数据,我就会填充一个视图模型来更新视图中的一些文本框,所以我需要在重定向时传递

我有以下声明:

return Redirect(this.Request.UrlReferrer.AbsolutePath);
这将重定向到调用者视图。它工作正常,但现在我需要在重定向时返回一个视图模型,类似这样(它是错误的):

那么我如何才能做到这一点呢

之所以要这样做,是因为我有一个jqrid,其中一列提供了一些操作、编辑和删除行。所以,如果用户单击edit,我将从传递到数据库的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      
    }
public ActionResult编辑(int-id)
{            
ItemViewModel item=新的ItemViewModel();
使用(DBContext context=new DBContext())
{
Items itemToModify=context.Items.Single(i=>i.ItemId==id);
item.Desc=itemToModify.Desc;
item.Name=itemToModify.Name;
}

返回重定向(this.Request.urlReferer.AbsolutePath,item);您可以像

在控制器中

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

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

    //Your Code
}

您可以像这样使用
TempData

在控制器中

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

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

    //Your Code
}

为什么不使用RedirectToAction(“Action”,“Controller”,new{paramName=item});?在控制器中执行html重定向是个坏主意。坏主意?这取决于您尝试执行的操作。我需要返回与MVC在控制器中推断的视图不同的视图。您建议的解决方案是重定向到特定控制器中的操作,但我不希望这样。我希望从控制器返回对于同一个视图,我的意思是,从我调用这个控制器的一个视图,然后在这个控制器完成它必须做的事情之后,我需要停留在同一个页面上,更新视图中的一些字段,这样我需要通过视图模型。你需要一个ajax调用,然后你可以使用
TempData
作为Satpal,我建议使用TempData,看看你为什么不告诉我们e重定向到操作(“操作”,“控制器”,新{paramName=item});?在控制器中执行html重定向是个坏主意。坏主意?这取决于您尝试执行的操作。我需要返回与MVC在控制器中推断的视图不同的视图。您建议的解决方案是重定向到特定控制器中的操作,但我不希望这样。我希望从控制器返回对于同一个视图,我的意思是,从我调用这个控制器的一个视图,然后在这个控制器完成它必须做的事情之后,我需要停留在同一个页面上,更新视图中的一些字段,这样我需要通过视图模型。你需要一个ajax调用,然后你可以使用
TempData
作为Satpal,我建议使用TempData,查看TempData之后的内容已使用,是否清除它是一种良好的做法。dispose?@JoshYates1980,在下一个请求完成后,您放入TempData的任何内容都将被丢弃。因此,无需在此处取消“后退按钮”。您想使用“item=TempData[“item”]作为ItemViewModel…。如果它为null…则在使用TempData后重定向到某处…。是否最好将其清除。dispose?@JoshYates1980,在下一个请求完成后,您放入TempData的任何内容都将被丢弃。因此,无需在此处取消“back”按钮。您想使用“item=TempData[“item”]作为ItemViewModel…。如果为空,则重定向到某处。。。。。。。。。