gpt4 book ai didi

c# - 带有两个提交按钮并返回同一页面的 Razor 页面

转载 作者:行者123 更新时间:2023-12-04 03:56:32 39 4
gpt4 key购买 nike

我在一个使用 Razor Pages 的 Asp.Net Core 项目中遇到了一个奇怪的情况。
简单地说,我有一个带有两个提交按钮的表单。其中一个用于保存表单并返回主页,第二个用于保存表单然后重新初始化模型 BindedProperty 以再次插入另一个文档(保存并重复场景).

第一个提交按钮没有定义页面处理程序,按照惯例应该调用 PageModel 文件上预定义的 OnPostAsync 方法,第二个按钮有一个 asp-page-handler ="SaveAndRepeat" 并且应该调用名为 OnPostSaveAndRepeatAsync 的自定义页面处理程序方法。

这是没有所有 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 的问题,但是我真的很想知道这种行为的原因。

我还需要补充一点,由于 ISP 尚未在其托管服务器上启用 3.1 版本的限制,该项目使用 ASP.NET Core 3.0

最佳答案

如果您首先单击 OnPost 方法,它会起作用,因为您的路由上没有任何处理程序。

每当您使用 asp-page-handler 时,处理程序的名称都会作为查询字符串参数添加到您的路由中,您可以在浏览器上查看它。

1

在那之后,您将调用默认的 OnPost,它不需要任何处理程序参数并且不会修改它们,这使得 Razor Pages 认为您正在使用SaveAndRepeat 处理程序,因此它被重定向到您的 OnPostSaveAndRepeatAsync 方法。

单击具有不同 asp-page-handler 的按钮会更改查询字符串中的处理程序参数,使其调用指定的方法。

关于c# - 带有两个提交按钮并返回同一页面的 Razor 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63791260/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com