Проверка ModelState - действие приводит к двойному запуску - PullRequest
0 голосов
/ 29 июня 2018

У меня есть страница оформления заказа, которая отправляется на асинхронную задачу. Если пользователь отправляет чистую форму (без ошибок проверки), контроллер выполняет итерацию правильно и выполняет все правильные вызовы для различных конечных точек, которые он должен сделать. Однако, если пользователь не может заполнить обязательное поле, контроллер повторяет результат действия. Кажется, не имеет значения, сколько раз кто-то нажимает кнопку подтверждения с подтверждением, он всегда срабатывает дважды.

Вот контроллер:

public async Task<ActionResult> PostCheckoutForm(CheckoutForm checkoutForm)
    {
        if (!ModelState.IsValid)
        {
            return CurrentUmbracoPage();
        };

        var basket = await TransactionLibrary.GetBasketAsync();

        switch (checkoutForm.SelectedPayment)
         {
             case PaymentType.Card:
        var restClient = new WorldpayRestClient("https://api.worldpay.com/v1", _config.WorldPayServiceKey);

        try
        {
            var sentToCrm = await _orderService.SaveOpportunity(CreateRequest(basket, checkoutForm));

Задача sendToCrm await запускается дважды, создавая две возможности в нашей CRM, но снова запускается один раз без проблем с проверками.

Вот вид:

<div class="checkout" data-component="components/checkout" data-checkout-client-id="@Model.ClientId">

            @using (Html.BeginUmbracoForm<CheckoutPageSurfaceController>("PostCheckoutForm", FormMethod.Post, new { id = "checkout__form" }))
{
        @Html.ValidationSummary(false)

        <section class="checkout__details">
            <div class="checkout__input-cells">
                <div class="checkout__input-cell">
                    @Html.LabelFor(m => m.FirstName)*
                    @Html.TextBoxFor(m => m.FirstName)
                </div>

<input class="checkout__payment-button button" type="submit" name="process" id="card_payment" value="Submit Payment" onclick='Worldpay.submitTemplateForm()' data-payment-type="@PaymentType.Card" />

Вот фрагмент класса для формы

public class CheckoutForm
{
    public string ClientId { get; set; }


    [Required(AllowEmptyStrings = false, ErrorMessage = "Please enter a first name"), Display(Name = "First Name")]
    public string FirstName { get; set; }

Есть идеи, что вызывает проблемы?

РЕДАКТИРОВАТЬ: действие Worldpay API (для нажатия):

Worldpay.template.submitTemplateForm=function(){
return Worldpay.callbacks.beforeSubmit()?void 
Worldpay.template.sendMessage(Worldpay.helpers.JSON.stringify({
submit:!0})):!1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...