如何在RedirectToPage中传递复杂对象

时间:2019-09-23 13:02:57

标签: c# razor-pages

我需要使用某些参数向页面添加重定向。查询字符串必须类似于:

  

PageName?ComplexObject.Property1 = true&ComplexObject.Property2 = 5

我试图通过将复杂对象传递给RedirectToPage方法来做到这一点:

public IActionResult OnPostRedirectToPage()
{
    return RedirectToPage(
        "PageName", 
        new
        {
            ComplexObject = new
            {
                Property1=true,
                Property2=5
            }
        });
}

但是我得到如下查询字符串:

  

PageName?ComplexObject = ComplexObjectTypeFullName

问题在于RedirectToPage仅为每个对象属性调用ToString方法。如何更改此行为,并使用我的示例中的属性名称重定向到页面?

2 个答案:

答案 0 :(得分:1)

大多数类似ResirectToPage()的方法所做的就是调用非原始类型的ToString()方法。在这种情况下,您需要覆盖ComplexObject类的ToString()方法,例如

public override string ToString(){
    return $"ComplexObject.Property1={Property1}&ComplexObject.Property2={Property2}";
}

但是为什么需要这样的东西。您可以单独获取属性,然后根据您使用的方法进行设置?

答案 1 :(得分:0)

我决定直接创建RedirectToPageResult,它会有所帮助:

return new RedirectToPageResult("PageName")
{
    RouteValues = new RouteValueDictionary
    {
        { "ComplexObject.Property1", true },
        { "ComplexObject.Property2", 5 }
    },
};