重定向到操作并传递引用类型

时间:2016-06-23 16:49:51

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

我有一个Filter类型:

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

我需要重定向到动作并传递此类型的instanse:

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。因此,只有引用类型存在问题。

如何在不使用filter的情况下将TempData与所有参考属性一起传递?

我也尝试使用但没有结果

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

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

1 个答案:

答案 0 :(得分:3)

您无法传递引用类型。原因是Url没有序列化数据,它只是遍历路由值对象中的属性,构造一个查询字符串,其中键是属性名称,值是属性值的字符串表示。如果您想进行TempData更改,那么使用<NewDataSet> <Table> <ProductCode>0120314</ProductCode> <SpecificationItemName>USB</SpecificationItemName> <SpecificationItemValues>&lt;Values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;&lt;Value&gt;USB 2.0&lt;/Value&gt;&lt;/Values&gt;</SpecificationItemValues> </Table> <Table> <ProductCode>0987046</ProductCode> <SpecificationItemName>Other</SpecificationItemName> <SpecificationItemValues>&lt;Values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;&lt;Value&gt;1 x PCIe 2.0 x16&lt;/Value&gt;&lt;Value&gt;2 x PCIe 2.0 x1&lt;/Value&gt;&lt;/Values&gt;</SpecificationItemValues> </Table> </NewDataSet> 可能是最简单的方法。