【问题标题】:How can I pass a complex object to another Razor Page?如何将复杂对象传递给另一个 Razor 页面?
【发布时间】:2021-07-22 08:07:31
【问题描述】:

我想将一个复杂对象(报告)从我的索引页面传递到编辑页面。我有自定义逻辑来确定用户有权访问哪些报告不会被 Azure Active Directory/角色捕获。因此,我不能简单地将 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 只获取路线数据。我应该在这里使用其他方法来传递它吗?如果这样做的唯一方法不是最佳实践,那么请随意说,因为如果模式不好,我不想实现它。

【问题讨论】:

    标签: asp.net-core razor razor-pages


    【解决方案1】:

    您可以尝试使用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; }
    
        }
    

    编辑.cshtml.cs:

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

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多