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…。如果为空,则重定向到某处。。。。。。。。。