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");
我正在尝试使用当前数据对象作为参数重定向到错误页面:
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");