单击“表单”按钮时,Razor模型中的Asp-Page-Handler未触发方法

时间:2019-06-12 23:26:21

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

首先,请知道我已经用Google搜索并尝试了所有发现的内容。我已经经历了一个又一个的解决方案,并在发布之前阅读了数十个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标记放在表单和按钮上。我尝试使用按钮和输入。似乎没有什么改变行为。

我的剃须刀页眉

@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方法是Async,这就是为什么我使用OnPost的异步版本)

public void OnPostBuildClickAsync()
{
   apiClientCalls.PostToApi("FslSmokeTest", "BuildKickOff");
}

页面加载成功时,我的OnGetAsync方法将触发。该方法中发生的所有事情均有效。我能够以普通的Razor方式引用模型,因此可以访问模型并将其绑定到页面。单击btnKickOffBuild按钮时,无法触发模型中的OnPost方法。

如果有人可以指出正确的方向,我将非常感激。

************* EDIT **********************
我尝试使OnPostBuildClickAsync方法实际上是异步的,并且尝试了上面的方法,并取消了方法名称的Async的使用。

作为测试,我还尝试了将与Razor框架相关的所有反伪造内容都在全球范围内关闭,以排除这种情况。那也不起作用。

我尝试通过将方法添加到包装在javascript函数中的Angular范围中来使用一种完全不同的方法,该方法仅在单击按钮时才会触发,但是由于它是服务器端@标记,因此无论页面加载如何运行条件。

************* EDIT **********************
归结为一个角度的东西。

按照以下链接中的“ 提交表单并阻止默认操作”部分: 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>

特别值得注意的是action =“”。这迫使Angular不要阻止将表单提交到服务器。

以下问题也详细介绍了Angular Actions:
ng-action does not add action attribute in the form

1 个答案:

答案 0 :(得分:2)

编辑: 我找到了它的根本原因。您需要创建一个Razor ViewImport文件,并将该文件中的所有razor依赖项导入。这样,您就可以在应用程序中使用taghelpers