La validación discreta de jQuery ignora la clase de "cancelación" en el botón de envío si se usa en el formulario Ajax

Estoy tratando de implementar la validación del lado del cliente opcional usando

ASP.NET MVC 4,validación jQuery discreta,ajax discretoEsto funciona bien

Las siguientes imágenes muestran lo que quiero decir con la validación del lado del cliente opcional: se espera que el único campo de mi formulario contenga un correo electrónico, por lo que hay un validador de correo electrónico adjunto.

Ahora hacemos clic en guardar. Porque nuestro texto"nombre @ doamin" no es un correo electrónico válido, se muestra el resumen de validación. Junto con el resumen de la validación, estamos ocultos."Guardar de todos modos" botón.

Este segundo botón es un botón de envío normal que solo tieneclass="cancel". Esto instruyejQuery.validate.js script para omitir la validación al enviar mediante este botón.

Aquí está el fragmento de código de la vista:

@using (Html.BeginForm())
{
    <div>
        <input data-val="true" data-val-email="Uups!" name="emailfield" />
        <span class="field-validation-valid" data-valmsg-for="emailfield" data-valmsg-replace="false">*</span>
    </div>

    <input type="submit" value="Save" />
    @Html.ValidationSummary(false, "Still errors:")
    <div class="validation-summary-valid" data-valmsg-summary="true">
        <input type="submit" value="Save anyway" class="cancel" />
    </div>
}

Todo esto funciona bien.

El problema

El segundo botón de enviar -"Guardar de todos modos" deja de funcionar como se espera si cambio al formulario Ajax. Simplemente se comporta como el normal y evita el envío hasta que la validación tenga éxito.

Aquí está el fragmento de código de la vista "ajaxified":

@using (Ajax.BeginForm("Edit", new { id = "0" },
        new AjaxOptions
            {
                HttpMethod = "POST",
                InsertionMode = InsertionMode.Replace,
                UpdateTargetId = "ajaxSection",
            }))
{
    <div>
        <input data-val="true" data-val-email="Uups!" name="emailfield" />
        <span class="field-validation-valid" data-valmsg-for="emailfield" data-valmsg-replace="false">*</span>
    </div>

    <input type="submit" value="Save" />
    @Html.ValidationSummary(false, "Still errors:")
    <div class="validation-summary-valid" data-valmsg-summary="true">
        <input type="submit" value="Save anyway" class="cancel" name="saveAnyway" />
    </div>
}

He depuradojQuery.validation.js Para averiguar cuál es la diferencia, pero fracasó.

Quema

Cualquier idea para solucionar o solucionar el problema y dejar que el formulario ajax se comporte como se espera es bienvenida.

Apéndice

Tener unvalidación del lado del cliente es una necesidad absoluta. La validación del lado del servidor no es una opción. Aparte de un mayor tráfico (esta muestra es una simplificación, la forma real contiene muchos más campos) y la latencia, hay una cosa que la validación del lado del servidor no haría: los validadores del lado del cliente resaltan los campos erróneos en el foco perdido. Esto significa que tiene un comentario tan pronto como pase al siguiente campo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta