RedirectToPage теряет содержимое элемента маршрута на страницах Razor - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь перенаправить на страницу ошибок с текущим объектом данных в качестве параметра:

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

Этот объект включает в себя много данных, мне нужны некоторые его свойства (которые являются типами классов) для ошибкистранице, но в обработчике страницы ошибок все содержимое dataObj сбрасывается до значений по умолчанию (ноль, 0 и т. д.).Как я могу передать эти данные?

1 Ответ

0 голосов
/ 24 октября 2018

Значения маршрута - это простые значения, которые вы передаете в 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");
...