Razor не запускает именованный обработчик, если свойство имеет аннотацию [Обязательно]. - PullRequest
0 голосов
/ 04 августа 2020

У меня простая форма с некоторыми обработчиками сообщений. Я хочу отправить форму только тогда, когда ввод не пуст.

<form method="post">
    <input asp-for="Feedback" />
    <button type="submit" asp-page-handler="Test">Submit</button>
</form>
public void OnPost() {}

public void OnPostTest() {}

когда у меня нет аннотации [Required] к свойству Feedback, он правильно запускает OnPostTest() , когда я нажимаю кнопку отправки. Но мне нужна необходимая проверка.

public string Feedback { get; set; }

однако, когда я добавляю аннотацию [Required], она всегда запускает метод OnPost(), когда я нажимаю кнопку отправки. Но я хочу запустить метод OnPostTest().

[Required]
public string Feedback { get; set; }

Я думал, что asp-page-handler прост, что мне не хватает?

Я использую. NET Core 3.1

1 Ответ

0 голосов
/ 04 августа 2020

Я нахожу виноватых в файле расширения JavaScript, где мы использовали submitHandler from jQuery Validation:

submitHandler: function(form) {
    form.submit();
}

Проходя через этот код, я обнаружил form.action не имеет обработчика, например "https://localhost:44352/TestPage". Таким образом, formaction на кнопке не переопределяет атрибут action владельца формы кнопки , чего я не ожидал.

В любом случае, event.submitter.formAction в нем есть обработчик, например "https://localhost:44352/TestPage?handler=Test", поэтому я исправил его, назначив его действию формы.

submitHandler: function(form) {
    if ((event.submitter && event.submitter.formAction 
         && form.action !== event.submitter.formAction) {
        form.action = event.submitter.formAction;
    }
    form.submit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...