Razor 页面发布表单上路由参数的模型绑定
Model Binding from Route Parameter on Posted Form for Razor Page
我有以下 Razor 页面设置:
[BindProperties]
public class MyFormPageModel : PageModel
{
public int Id { get; set; }
public void OnGet(){}
public IActionResult OnPost() {
return RedirectToPage("Index", new {Id});
}
}
并且:
@page "{Id:int?}"
<form method="post">
<button type=submit>Submit</button>
</form>
如果我访问 /MyForm/1
表单+按钮加载。
点击按钮成功发布到/MyForm/1
但这只会从后端产生 400 错误。
后台输出日志也没有错误显示。
找到我的问题。
在这种情况下未生成防伪令牌,因为表单是动态生成的。
如果您从一开始就在 Razor .cshtml 中有一个 <form>
,Razor 会自动生成防伪令牌,但是一旦您的表单动态生成就不起作用了。
此页面为我的问题提供了一些出色的解决方案:
https://exceptionnotfound.net/using-anti-forgery-tokens-in-asp-net-core-razor-pages/
我有以下 Razor 页面设置:
[BindProperties]
public class MyFormPageModel : PageModel
{
public int Id { get; set; }
public void OnGet(){}
public IActionResult OnPost() {
return RedirectToPage("Index", new {Id});
}
}
并且:
@page "{Id:int?}"
<form method="post">
<button type=submit>Submit</button>
</form>
如果我访问 /MyForm/1
表单+按钮加载。
点击按钮成功发布到/MyForm/1
但这只会从后端产生 400 错误。
后台输出日志也没有错误显示。
找到我的问题。
在这种情况下未生成防伪令牌,因为表单是动态生成的。
如果您从一开始就在 Razor .cshtml 中有一个 <form>
,Razor 会自动生成防伪令牌,但是一旦您的表单动态生成就不起作用了。
此页面为我的问题提供了一些出色的解决方案: https://exceptionnotfound.net/using-anti-forgery-tokens-in-asp-net-core-razor-pages/