c# - 单击表单按钮时,Asp-Page-Handler 不会触发 Razor 模型中的方法

标签 c# jquery html asp.net-mvc razor

首先请知道,我已经用谷歌搜索并尝试了我找到的所有内容。在发布本文之前,我已经解决了一个又一个的解决方案,并阅读了数十个 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/

相关文章:

c# - 从 .NET 调用带有 WS Security 的 Web 服务

python - 从 ajax 调用 python 脚本得到 : malformed header from script. Bad header

javascript - 通过 routerLink Angular 路由器模板表达式传递数据?

c# - C# 函数参数中的方括号语法?

c# - Activator.CreateInstance 与工厂模式

php - Jquery Onclick 将数据发送到新打开的窗口

javascript - 将 Canvas 转换为 pdf

html - 在多列中按字母顺序列出固定数量的元素

c# - Azure Web PubSub 和服务器之间的身份验证

javascript - onclick 转到 url 然后做一些具体的事情