首先请知道,我已经用谷歌搜索并尝试了我找到的所有内容。在发布本文之前,我已经解决了一个又一个的解决方案,并阅读了数十个 Stack Overflow 问题。我不知道为什么这不起作用。话虽这么说,我对方法处理程序的东西不是很熟悉,所以我可能会犯一个愚蠢的错误。
实现细节
- .NET Core 2.2
- Microsoft.AspNetCore.Razor.Design 2.2.0
- AngularJS.Core 1.7.8
我正在创建一个内部门户来聚合 Jenkins 构建和测试数据。我想允许通过页面上的按钮启动运行 Jenkins 测试的作业构建。当我单击按钮时,我没有收到任何错误。我在控制台中什么也没有得到,也没有遇到任何在实际触发 OnPost 方法时会遇到的断点。
我尝试使用 OnPost 和 OnPostAsync 方法。我尝试通过 asp-page-handler 使用自定义名称以及默认名称。我尝试将 asp-page-handler 标记放在表单和按钮上。我尝试过使用按钮和输入。似乎没有什么可以改变这种行为。
我的 Razor 页面的标题
@page "{handler?}"
@using JenkinsRazorApi.Pages
@using System.Linq;
@using System.Data;
@using System.Web;
@model FslModel
@{
ViewData["Title"] = "fsl";
}
我的 cshtml 标记
<div>
<form method="POST">
<input type="submit" class="btnKickOffBuild" name="kickOffBuild" id="btnKickOffBuild" asp-page-handler="BuildClick" value="Build"/>
</form>
</div>
我的模型中的方法(PostToApi 方法是异步的,这就是我使用异步版本的 OnPost 的原因)
public void OnPostBuildClickAsync()
{
apiClientCalls.PostToApi("FslSmokeTest", "BuildKickOff");
}
当页面加载没有问题时,我的 OnGetAsync 方法将触发。该方法中发生的一切都有效。我能够以正常的 Razor 方式引用模型,因此模型可以访问并绑定(bind)到页面。当我单击 btnKickOffBuild
按钮时,我无法触发模型中的 OnPost 方法。
如果有人能指出我正确的方向,我将非常感激。
****************编辑************************
我尝试将 OnPostBuildClickAsync 方法设置为真正的异步方法,并尝试了上面的方法,并将异步方法从方法名称中删除,但没有效果。
作为测试,我还尝试在全局范围内关闭与 Razor 框架相关的所有防伪功能,以排除这种情况。这也不起作用。
我尝试以完全不同的方式执行此操作,将方法添加到包装在 JavaScript 函数中的 Angular 作用域中,该函数仅在单击按钮时触发,但由于它是服务器端 @ 标记,因此无论页面加载如何,它都会在页面加载时运行函数中的条件。
****************编辑************************
这归结为 Angular 的事情。
根据以下链接中的“提交表单并防止默认操作”部分: https://docs.angularjs.org/api/ng/directive/form
Angular 需要一个操作标记才能将表单提交到服务器。如果没有它,表单将无法提交。我将 cshtml 更改为:
<div>
<h5 style="margin-left: 50px; float:left;">Test Pass/Fail</h5>
<form method="post" action="">
<button type="submit" class="btnKickOffBuild" asp-page-handler="BuildClick">Build</button>
</form>
</div>
特别值得注意的是操作=“”。这会强制 Angular 不阻止向服务器提交表单。
以下问题也包含有关 Angular Actions 的一些详细信息:
ng-action does not add action attribute in the form
最佳答案
编辑: 我已经找到了它的根本原因。您需要创建一个 Razor ViewImport 文件并导入该文件中的所有 razor 依赖项。这样您就可以在应用程序中使用标签帮助程序
关于c# - 单击表单按钮时,Asp-Page-Handler 不会触发 Razor 模型中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56571551/