如何在 RedirectToPage 中传递复杂对象

How to pass complex object in RedirectToPage

我需要使用某些参数将重定向添加到页面。查询字符串必须如下所示:

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 方法。如何更改此行为并使用示例中的属性名称重定向到页面?

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

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

但是你为什么需要那样的东西。您可以单独获取属性并在您使用的方法上设置它们吗?

我决定直接创建 RedirectToPageResult,这有帮助:

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