【问题标题】:Redirect to action and passing reference type重定向到操作并传递引用类型
【发布时间】:2016-06-23 16:49:50
【问题描述】:

我有一个Filter 类型:

public class Filter 
{
   public int FilterId { get; set; }
   public ICollection<int> ModuleIds { get; set; }
}

我需要重定向到操作并传递这种类型的实例:

public ActionResult Navigate 
{
   var filter = new Filter()
   {
      FilterId = 5,
      ModuleIds = new List<int>() { 6 };
   }

   return RedirectToAction("list", "user", filter);
}

这是目标操作:

public ActionResult List(Filter filter) 
{
  var filterId = filter.FilterId; // = 5
  // but filter.ModuleIds.Count = 0 
}

结果我得到了空filter.ModuleIds。因此,只有引用类型存在问题。

如何在不使用TempData 的情况下传递所有引用属性的filter

我也尝试使用但没有结果

return RedirectToAction("list", "user", new RouteValueDictionary(filter);

return RedirectToAction"list", "user", new { filter = filter} );

【问题讨论】:

  • 你不能传递引用类型。一种解决方法是将值保存在 Session/TempData 或将 filter 对象序列化为 json,这将使其成为值类型。

标签: c# asp.net .net asp.net-mvc redirect


【解决方案1】:

您不能传递引用类型。原因是RedirectToAction 不序列化数据,它只是迭代路由值对象中的属性,构造一个查询字符串,键是属性名称,值是属性值的字符串表示形式。如果您想更改Url,那么使用TempData 可能是最简单的方法。

【讨论】:

  • 感谢您的回答。如果没有办法传递我的对象,我将使用 Session
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多