繁体   English   中英

MVC 5-RedirectToAction-无法正确传递参数

[英]MVC 5 - RedirectToAction - Cannot pass parameter correctly

我有一种方法,如下所示:

[Authorize]
public ActionResult Create(int? birdRowId, Entities.BirdSighting sighting)
{
   ...
   ...
}

我想从同一控制器中的另一个方法调用上述方法,如下所示:

   [Authorize]
   [HttpPost]
   public ActionResult Create(Entities.BirdSighting birdSighting, FormCollection collection)
    {
    ...
    ...

    return RedirectToAction("Create", new {birdRowId = 10, sighting = birdSighting}); 
    }

RedirectToAction方法正确调用该方法。 而且,被调用的方法的第一个参数(birdRowId)等于10。但是,即使我要传递带有值的实例化对象,第二个参数Sighting始终为null。 我究竟做错了什么?

记住, HTTP是无状态的!

RedirectToAction方法将302响应返回到客户端浏览器,因此浏览器将向指定的URL发出新的GET请求。

如果您尝试遵循PRG模式,我认为您不应尝试传递复杂的对象。 您应该只传递资源的ID,以便GET操作可以使用该ID再次构建资源(模型)。

return RedirectToAction("Created", "YourControllerName", new { @id=10} );

然后在Created操作中读取id并在那里建立对象。

public ActionResult Created(int id)
{
  BirdSighting sighting=GetSightingFromIDFromSomeWhere(id);
  // to do  :Return something back here (View /JSON etc..)
}

如果您确实想跨(无状态)HTTP请求传递一些数据,则可以使用一些临时存储机制,例如TempData

在HttpPost操作方法中将对象设置为TempData。

[HttpPost]
public ActionResult Create(BirdSighting birdSighting, FormCollection collection)
{
 // do something useful here
  TempData["BirdSighting"] =birdSighting;
  return RedirectToAction("Created", "YourControllerName");
}

在您的GET操作方法中

public ActionResult Created()
{      
  var model=TempData["BirdSighting"] as BirdSighting;
  if(model!=null)
  {
     //return something
  } 
  return View("NotFound");
}

TempData使用Session对象存储数据。 但是一旦读取数据,数据就会终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM