通过 RedirectToPage 传递数据

问题描述

我有一个 ASP.NET Core RazorPages 访问者管理项目,我正在处理该项目,我需要使用 RedirectToPage 方法将类的实例从一个页面传递到另一个页面
流程:访问者首先在创建页面填写自己的信息,信息发布到数据库,然后访问者的实例传递到第二个页面,在那里对数据进行格式化和截图以发布jpeg到数据库中访问者的实例。
我一直在尝试其他帖子中建议的数据传递方法,但是我在将 MVC 转换为 RazorPages 时遇到了困难。我不认为我可以使用 TempData 或 ViewData,因为我需要同时发布到数据库添加数据库中的特定访问者条目,所以我一直在查看 Microsoft 的关于 RedirectToPage 方法的文档,以及 { {3}} 不同的方法。我想我需要将 PRG 模式方法与接受参数 pageName、pageHandler 和片段的 RedirectToPage(string,string,string) 一起使用。我遇到问题的部分是调用访问者实例的第二个页面模型的代码 (RegistrationSuccess.cshtml.cs)。

这是来自 Create.cshtml.cs 的相关代码

 public class CreateModel : PageModel
{
    private readonly VisitorManagementSystem.Data.VisitorManagementSystemContext _context;
    [BindProperty]
    public Visitor Visitor { get; set; }

    public CreateModel(VisitorManagementSystem.Data.VisitorManagementSystemContext context)
    {
       _context = context;
    }

    public IActionResult OnGet()
    {
        return Page();
    }
        
    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }
        //....
        _context.Visitor.Add(Visitor);
        await _context.SaveChangesAsync();
        return RedirectToPage("./RegistrationSuccess","Visitor",new { visitorId  = Visitor.ID.ToString() });
    }
}

注册成功.cshtml.cs

public class RegistrationSuccessModel : PageModel
{
    [BindProperty]
    public Visitor Visitor { get; set; }
    private readonly VisitorManagementSystem.Data.VisitorManagementSystemContext _context;
    public RegistrationSuccessModel(VisitorManagementSystem.Data.VisitorManagementSystemContext context)
    {
        _context = context;
    }
    
    //This is where I'm not sure what the correct Syntax is to call the instance of the visitor
    public IActionResult OnGet(string visitorId)
    {
        //from the visitorId value,get the object
        Visitor = VisitorManagementSystem.GetVisitor(visitorId);
        return Page();
    }
    public async Task<IActionResult> OnPostAsync()
    {
        return RedirectToPage("/Visitors/RegistrationSuccess");
    }
}

我尝试过使用 RedirectToPage(string,object) 方法,但这有两个问题:访问者的所有信息都显示在 URL 中,这似乎不安全;此外,我收到错误“无法访问此站点 ERR_HTTP2_PROTOCOL_ERROR”
我是新手,所以非常感谢您的帮助!

解决方法

您应该添加到您的 RegistrationSuccess.cshtml.cs razor 页面的顶部

@page "{visitorId}"

从行动

  return RedirectToPage("./RegistrationSuccess",new { visitorId  = Visitor.ID.ToString() });

并修复操作

public IActionResult OnGet(string visitorId)
    {
   if (!string.IsNullOrEmpty(visitorId))
Visitor = _context.Set<Visitor>().FirstOrDefault( i=> i.VisitorId==visitorId);
return Page();

    }