如何将复杂对象传递给另一个 Razor 页面?
How can I pass a complex object to another Razor Page?
我想将复杂对象(报告)从我的索引页面传递到编辑页面。我有自定义逻辑来确定用户有权访问哪些报告不会被 Azure Active Directory/roles 捕获。因此,我不能简单地将 id 作为路由参数传递并在编辑页面上检索它。
目前我有一份关于 Index.cs 的报告列表,这些报告显示在带有编辑按钮的视图中。
public IEnumerable<Report> Reports { get; set; }
单击“编辑”时,我想将该报告直接发送到“编辑”页面。
public async Task<IActionResult> OnPostEditAsync(long id)
{
var report = Reports.FirstOrDefault(x => x.Id == id);
return RedirectToPage("./Edit", report);
}
但是,RedirectToPage
只获取路由数据。我应该在这里使用其他方法来传递它吗?如果这样做的唯一方法不是最佳实践,那么请随意说,因为如果模式不好,我不想实施它。
你可以尝试使用TempData
,这里有一个演示:
Page1.cshtml:
<form method="post">
<input name="id" />
<input type="submit" value="submit" asp-page-handler="Edit"/>
</form>
Page1.cshtml.cs(我用假数据测试):
public IEnumerable<Report> Reports { get; set; }
public void OnGet()
{
}
public async Task<IActionResult> OnPostEditAsync(long id)
{
Reports = new List<Report> { new Report { Id = 1, Name = "Report1" }, new Report { Id = 2, Name = "Report2" }, new Report { Id = 3, Name = "Report3" } };
var report = Reports.FirstOrDefault(x => x.Id == id);
TempData["report"] = JsonConvert.SerializeObject(report);
return RedirectToPage("./Edit");
}
报告(我用一个简单的模型来测试):
public class Report
{
public int Id { get; set; }
public string Name { get; set; }
}
Edit.cshtml.cs:
public void OnGet()
{
Report r =JsonConvert.DeserializeObject<Report>(TempData["report"].ToString());
}
结果:
我想将复杂对象(报告)从我的索引页面传递到编辑页面。我有自定义逻辑来确定用户有权访问哪些报告不会被 Azure Active Directory/roles 捕获。因此,我不能简单地将 id 作为路由参数传递并在编辑页面上检索它。
目前我有一份关于 Index.cs 的报告列表,这些报告显示在带有编辑按钮的视图中。
public IEnumerable<Report> Reports { get; set; }
单击“编辑”时,我想将该报告直接发送到“编辑”页面。
public async Task<IActionResult> OnPostEditAsync(long id)
{
var report = Reports.FirstOrDefault(x => x.Id == id);
return RedirectToPage("./Edit", report);
}
但是,RedirectToPage
只获取路由数据。我应该在这里使用其他方法来传递它吗?如果这样做的唯一方法不是最佳实践,那么请随意说,因为如果模式不好,我不想实施它。
你可以尝试使用TempData
,这里有一个演示:
Page1.cshtml:
<form method="post">
<input name="id" />
<input type="submit" value="submit" asp-page-handler="Edit"/>
</form>
Page1.cshtml.cs(我用假数据测试):
public IEnumerable<Report> Reports { get; set; }
public void OnGet()
{
}
public async Task<IActionResult> OnPostEditAsync(long id)
{
Reports = new List<Report> { new Report { Id = 1, Name = "Report1" }, new Report { Id = 2, Name = "Report2" }, new Report { Id = 3, Name = "Report3" } };
var report = Reports.FirstOrDefault(x => x.Id == id);
TempData["report"] = JsonConvert.SerializeObject(report);
return RedirectToPage("./Edit");
}
报告(我用一个简单的模型来测试):
public class Report
{
public int Id { get; set; }
public string Name { get; set; }
}
Edit.cshtml.cs:
public void OnGet()
{
Report r =JsonConvert.DeserializeObject<Report>(TempData["report"].ToString());
}
结果: