C# ModelState验证-actionresult触发两次

C# ModelState验证-actionresult触发两次,c#,asp.net-mvc,model-validation,C#,Asp.net Mvc,Model Validation,我有一个提交到异步任务的签出页面。如果用户提交了一个干净的表单(没有验证错误),控制器将正确地进行迭代,并对它需要执行的各个端点进行所有正确的调用。但是,如果用户未能填写必填字段,控制器将重复actionresult。一个人按多少次提交验证似乎并不重要,它总是触发两次 这是控制器: public async Task<ActionResult> PostCheckoutForm(CheckoutForm checkoutForm) { if (!ModelSt

我有一个提交到异步任务的签出页面。如果用户提交了一个干净的表单(没有验证错误),控制器将正确地进行迭代,并对它需要执行的各个端点进行所有正确的调用。但是,如果用户未能填写必填字段,控制器将重复actionresult。一个人按多少次提交验证似乎并不重要,它总是触发两次

这是控制器:

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));
你知道是什么导致了这些问题吗

编辑:Worldpay API操作(针对点击):


你的
onclick='Worldpay.submitTemplateForm()
是什么?@StephenMuecke,我相信是使用Worldpay的API调用的。我已经从他们的API中添加了代码片段-我认为这只是使用WorldPay表单收集价值的方法信息不足,但看起来您正在进行ajax调用,但没有取消正常表单提交,因此您正在提交twice@StephenMuecke这只会因为验证而受到影响吗?如前所述,如果所有字段都输入正确,它将非常完美。不确定(我对Worldpay一无所知)
<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.template.submitTemplateForm=function(){
return Worldpay.callbacks.beforeSubmit()?void 
Worldpay.template.sendMessage(Worldpay.helpers.JSON.stringify({
submit:!0})):!1}