RedirectToPage 在 Razor Pages 中丢失路由对象项内容

RedirectToPage losts route object item content in Razor Pages

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

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

此对象包含大量数据,我需要它的一些属性(类 类型)用于错误页面,但在错误页面处理程序中,整个 dataObj 内容已重置为默认值(null,0 ETC)。我怎样才能传递这些数据?

路由值是您在 URL 中传递的简单值。你不能那样传递复杂的对象。您可以使用 TempData 传递复杂对象以供下一个请求使用:https://www.learnrazorpages.com/razor-pages/tempdata

您需要将对象序列化为 JSON 并且可能使用 Session 作为数据的存储机制,而不是默认的基于 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);
}

在你的 OnPost 中,你会这样做:

if (!dataObj.IsValid)
{
    TempData.Set("errors", dataObj);
    return RedirectToPage("./Error");
}

然后出错:

var errors = TempData.Get<WhateverTypeDataObjIs>("errors");