【问题标题】:Redirect to action passes null instead of object重定向到操作传递 null 而不是对象
【发布时间】:2015-03-07 10:18:10
【问题描述】:

我的 MVC4 项目使用 RedirectToAction() 将值传递给另一个控制器。

问题是,它传递的是 null 而不是一个值

    [HttpGet]
    public ActionResult MyProduct(product prod)
    {
        return RedirectToAction("Index", "MyController", new { prod = prod});
    }

这会准确地重定向到我的 MyController

    public ActionResult Index(Product prod)
    {
        // prod is null :(
    }

我在 MyProduct 控制器中戴上手表,prod 对象有一个值。属性没有值:(它是空的

为什么我在控制器之间传递对象时它变为null?

【问题讨论】:

标签: asp.net-mvc-4


【解决方案1】:

您输入错误的参数名称,您在操作时期望将其更改为 prod,因为 prod 是 RouteValueDictionary 的一部分,它将由字典中定义的 askey 相同的参数收集

return RedirectToAction("Index", "MyController", new { prod = prod});

更新

如果我正确理解您的问题,您不能通过RedirectToAction 的路由参数传递模型对象,而是可以传递需要发送的特定属性,或者您可以使用TempData

您不能使用 RedirectAction 发送数据。那是因为您正在执行 301 重定向,并且会返回到客户端。

当您重定向时,您主要将查询字符串作为将数据传递给其他请求的一种方式。另一种方法是使用TempData,它将数据存储在服务器上,您可以在下一个请求时检索它。 默认情况下 TempData 使用 Session。

考虑这个图像以获得模型-视图-控制器之间传递数据的方式

【讨论】:

  • 很抱歉,这是一个错字。真对不起。更新帖子
  • 您能否详细说明 tempdata... RedirectToAction ?
  • @MyDaftQuestions 请检查我的更新答案,我会添加更多内容
  • 关于它是 301 的那一点非常清楚。谢谢你。这真的是一个超级答案,解释清楚,清晰且非常有用。
  • 作为骗子关闭:)
【解决方案2】:

您的函数参数名称与您的RedirectToAction() 不匹配。

你应该这样改变它:

return RedirectToAction("Index", "MyController", new { prod = prod});

【讨论】:

  • 很抱歉,这是一个错字。真对不起。更新帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2011-03-20
  • 1970-01-01
相关资源
最近更新 更多