通过 RedirectToPage 传递数据
Passing data through RedirectToPage
我有一个 ASP.NET 核心 RazorPages 访问者管理项目,我需要使用 RedirectToPage 方法将 class 的实例从一个页面传递到另一个页面。
过程:访问者首先在创建页面上填写他们的信息,信息被post输入数据库,然后访问者的实例被传递到第二个页面,在那里数据被格式化和截图为 post 数据库中访问者实例的 jpeg。
我一直在尝试其他 post 中建议的数据传递方法,但我在将 MVC 转换为 RazorPages 时遇到困难。我不认为我可以使用 TempData 或 ViewData,因为我需要同时 post 到数据库并添加到数据库中的特定访问者条目,所以我一直在浏览微软关于 RedirectToPage 方法的文档,以及关于不同方法的 this post。我想我需要将 PRG 模式方法与 RedirectToPage(string, string, string) 一起使用,它接受参数 pageName、pageHandler 和 fragment。我遇到问题的部分是调用访问者实例的第二页模型代码 (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() });
}
}
RegistrationSuccess.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 剃须刀页面的顶部
@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();
}
我有一个 ASP.NET 核心 RazorPages 访问者管理项目,我需要使用 RedirectToPage 方法将 class 的实例从一个页面传递到另一个页面。
过程:访问者首先在创建页面上填写他们的信息,信息被post输入数据库,然后访问者的实例被传递到第二个页面,在那里数据被格式化和截图为 post 数据库中访问者实例的 jpeg。
我一直在尝试其他 post 中建议的数据传递方法,但我在将 MVC 转换为 RazorPages 时遇到困难。我不认为我可以使用 TempData 或 ViewData,因为我需要同时 post 到数据库并添加到数据库中的特定访问者条目,所以我一直在浏览微软关于 RedirectToPage 方法的文档,以及关于不同方法的 this post。我想我需要将 PRG 模式方法与 RedirectToPage(string, string, string) 一起使用,它接受参数 pageName、pageHandler 和 fragment。我遇到问题的部分是调用访问者实例的第二页模型代码 (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() });
}
}
RegistrationSuccess.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 剃须刀页面的顶部
@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();
}