【问题标题】:RedirectToPage losts route object item content in Razor PagesRedirectToPage 在 Razor 页面中丢失了路由对象项内容
【发布时间】:2018-10-24 10:41:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# razor-pages asp.net-core-routing


    【解决方案1】:

    路由值是您在 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");
    

    【讨论】:

      猜你喜欢
      • 2021-03-18
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2019-08-15
      • 2018-10-16
      • 2023-03-24
      • 2018-10-16
      • 2023-01-30
      相关资源
      最近更新 更多