Asp-Page-Handler не запускает метод в модели Razor при нажатии кнопки формы - PullRequest
0 голосов
/ 13 июня 2019

Сначала, пожалуйста, знайте, что я погуглил и перепробовал все, что нашел.Я прошел через решение за решением и прочитал десятки вопросов о переполнении стека, прежде чем опубликовать это.Я понятия не имею, почему это не работает.Тем не менее, я не очень знаком с материалом обработчика методов, поэтому я могу сделать глупую ошибку.

Детали реализации
- .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>

Мой метод в моей модели (метод PostToApiAsync, поэтому я использую Async-версию OnPost)

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

Мой метод OnGetAsync срабатывает, когда страница загружается без проблем.Все, что происходит в этом методе, работает.Я могу ссылаться на модель обычным способом Razor, чтобы модель была доступна и привязана к странице.Я просто не могу запустить метод OnPost в моей модели, когда нажимаю кнопку btnKickOffBuild.

Если кто-то может указать мне правильное направление, я буду очень признателен.

************* РЕДАКТИРОВАТЬ **********************
Я попытался сделать метод OnPostBuildClickAsync на самом деле Async, и япопробовал, как у меня выше, и снял Async с имени метода, но безрезультатно.

Я также попытался, в качестве теста, отключить все компоненты Anti-Forgery, которые связаны с платформой Razor, глобальнопросто чтобы исключить это.Это тоже не сработало.

Я попытался сделать это совершенно по-другому, добавив метод к моей области видимости Angular, обернутой в функцию javascript, которая должна запускаться только при нажатии кнопки, но так как это на стороне сервера@ тег выполняется при загрузке страницы независимо от условий в функции.

************* РЕДАКТИРОВАТЬ **********************
Это сводится к угловой вещи.

Согласно разделу " Отправка формы и предотвращение действия по умолчанию " в следующей ссылке: 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 не добавляет атрибут действия в форму

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...