Asp.net core 如何将复杂对象传递到另一个页面?

Asp.net core 如何将复杂对象传递到另一个页面?,asp.net-core,razor,razor-pages,Asp.net Core,Razor,Razor Pages,我想将一个复杂对象(报表)从索引页传递到编辑页。我有自定义逻辑来确定用户有权访问哪些报告,而这些报告不会被Azure Active Directory/角色捕获。因此,我不能简单地将id作为路由参数传递并在编辑页面上检索它 public async Task<IActionResult> OnPostEditAsync(long id) { var report = Reports.FirstOrDefault(x => x.Id == id); ret

我想将一个复杂对象(报表)从索引页传递到编辑页。我有自定义逻辑来确定用户有权访问哪些报告,而这些报告不会被Azure Active Directory/角色捕获。因此,我不能简单地将id作为路由参数传递并在编辑页面上检索它

public async Task<IActionResult> OnPostEditAsync(long id)
{    
    var report = Reports.FirstOrDefault(x => x.Id == id);
    return RedirectToPage("./Edit", report);
}
目前,我在Index.cs上有一个报告列表,该列表显示在带有编辑按钮的视图中

public IEnumerable<Report> Reports { get; set; }
public IEnumerable报表{get;set;}
单击编辑时,我希望将该报告直接发送到编辑页面

public async Task<IActionResult> OnPostEditAsync(long id)
{    
    var report = Reports.FirstOrDefault(x => x.Id == id);
    return RedirectToPage("./Edit", report);
}
PosteditAsync上的公共异步任务(长id) { var report=Reports.FirstOrDefault(x=>x.Id==Id); 返回重定向Topage(“/编辑”,报告); }
但是,
RedirectToPage
仅获取路线数据。有没有一种不同的方法我应该在这里通过这个?如果这样做的唯一方法不是最佳实践,那么请随意说,因为如果模式不好,我就不想实施此操作。

您可以尝试使用
TempData
,下面是一个演示:

Page1.cshtml:

<form method="post">
    <input name="id" />
    <input type="submit" value="submit" asp-page-handler="Edit"/>
</form>
Edit.cshtml.cs:

public void OnGet()
        {
            Report r =JsonConvert.DeserializeObject<Report>(TempData["report"].ToString());
        }
public void OnGet()
{
Report r=JsonConvert.DeserializeObject(TempData[“Report”].ToString());
}
结果:

public void OnGet()
        {
            Report r =JsonConvert.DeserializeObject<Report>(TempData["report"].ToString());
        }