重定向到页面丢失了 Razor 页面中的路由对象项内容



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

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

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

路由值是在 URL 中传递的简单值。不能以这种方式传递复杂对象。可以使用 TempData 传递复杂对象以供下一个请求使用:https://www.learnrazorpages.com/razor-pages/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);
}

在您的 OnPost 中,您将执行以下操作:

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

然后错误:

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

最新更新