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