【发布时间】:2020-12-26 16:23:54
【问题描述】:
我在一个使用 Razor Pages 的 Asp.Net Core 项目中遇到了一个奇怪的情况。
简单地说,我有一个带有两个提交按钮的表单。其中一个用于保存表单并返回主页,第二个用于保存表单然后重新初始化模型 BindedProperty 以再次插入另一个文档(保存并重复场景)。
第一个提交按钮没有定义页面处理程序,按照惯例应该调用 PageModel 文件上预定义的 OnPostAsync 方法,第二个提交按钮有一个 asp-page-handler="SaveAndRepeat" 并且应该调用一个名为 @ 的自定义页面处理程序方法987654323@.
这是没有所有 div 和输入的 cshtml 代码。
<form method="POST">
... a lot of html and tags ...
<button id="insert-doc-button" type="submit" class="btn btn-primary">Save</button>
<button id="insert-repeat-doc-button" type="submit" asp-page-handler="SaveAndRepeat" class="btn btn-primary">Save and Repeat</button> }
</form>
这是 PageModel 文件中响应提交的精简代码
[BindedProperty]
DocumentVM CurrentDoc {get;set;}
.....
public async Task<IActionResult> OnPostAsync()
{
try
{
bool saved = await CommonSave();
......
return RedirectToPage("/index");
}
....
}
public async Task<IActionResult> OnPostSaveAndRepeatAsync()
{
try
{
bool saved = await CommonSave();
...
// Duplicates the BindedProperty
CurrentDoc = CurrentDoc.Duplicate();
return Page();
}
....
}
现在的问题。如您所见,在调用 SaveAndRepeat 之后,PageModel 代码返回到同一页面,其中 BindedProperty 加载了上次保存时重复的值。 (它按预期工作)
但是现在,如果我尝试按下保存按钮(因为我已经到达要插入的最后一个文档),代码将再次调用OnPostSaveAndRepeatAsync 处理程序,而不是默认的OnPostAsync。
当然,如果我只按下保存按钮,这不会发生,因为我只有一个文档要插入。在这种情况下,代码正确调用了OnPostAsync。
说实话,我不是这项技术的专家,现在才开始我的第一个项目,但这似乎我还没有理解一些重要的东西。是的,我已经解决了为保存按钮设置 asp-page-handler 的问题,但是我真的很想知道这种行为的原因。
我还需要补充一点,该项目使用 ASP.NET Core 3.0,因为 ISP 施加的限制尚未在其托管服务器上启用 3.1 版本。
【问题讨论】:
标签: c# asp.net-core razor-pages