C# RedirectToPage会丢失Razor页面中的路由对象项内容

C# RedirectToPage会丢失Razor页面中的路由对象项内容,c#,razor-pages,asp.net-core-routing,C#,Razor Pages,Asp.net Core Routing,我正在尝试重定向到当前数据对象作为参数的错误页: if (!dataObj.IsValid) { return RedirectToPage("./Error", new { dataObj = dataObj }); } 这个对象包含很多数据,我需要它的一些属性(类类型)用于错误页面,但在错误页面处理程序中,整个dataObj内容都重置为默认值(null、0等)。如何传递这些数据?路由值是在URL中传递的简单值。不能以这种方式传递复杂对象。您可以使用TempData传递复杂对象以供下

我正在尝试重定向到当前数据对象作为参数的错误页:

if (!dataObj.IsValid)
{
    return RedirectToPage("./Error", new { dataObj = dataObj });
}

这个对象包含很多数据,我需要它的一些属性(类类型)用于错误页面,但在错误页面处理程序中,整个dataObj内容都重置为默认值(null、0等)。如何传递这些数据?

路由值是在URL中传递的简单值。不能以这种方式传递复杂对象。您可以使用TempData传递复杂对象以供下一个请求使用:

您需要将对象序列化为JSON,并可能使用会话作为数据的存储机制,而不是默认的基于cookie的存储。我使用以下扩展方法序列化和反序列化复杂类型,以便与TempData一起使用:

public static void Set<T>(this ITempDataDictionary tempData, string key, T value) where T : class
{
    tempData[key] = JsonConvert.SerializeObject(value);
}

public static T Get<T>(this ITempDataDictionary tempData, string key) where T : class
{
    object o;
    tempData.TryGetValue(key, out o);
    return o == null ? null : JsonConvert.DeserializeObject<T>((string)o);
}
然后错误地:

var errors = TempData.Get<WhateverTypeDataObjIs>("errors");
var errors=TempData.Get(“错误”);
var errors = TempData.Get<WhateverTypeDataObjIs>("errors");