2

いくつかのリモート検証を使用したviewModelデータに基づくビューがあります(リモート検証を使用した3つのフィールド)。

問題は、フォームを送信すると、送信と同時に 3 つのリモート検証がすべてトリガーされることです (以下を参照)。

ここに画像の説明を入力

上の図では、3 つのリモート検証がすべて同時にトリガーされ、ステータスが保留になっていることがわかります。1分後にタイムアウトします。

これが私のコードです:

var $dialog = $('#modal-dialog');
$dialog.modal('show');
// Enable client side validation
$.validator.unobtrusive.parse(this);
// Setup the ajax submit logic
submitLogic(params);

function submitLogic(params) {
    var $form = $('#modal-dialog form');
    $form.submit(function () {

        // Do not submit if the form does
        // not pass client side validation
        if (!$(this).valid()) {
            writeError('msgError', pDialogForm.validationFailed);
            return false;
        }

        clearErrors();

        $.post($(this).attr('action'), $(this).serialize(), function (data, status) {
            // Post success
            $('#modal-dialog').modal('hide');
        }).error(function (error, status, a, b) {
            // Post failed
            writeError('msgError', pDialogForm.validationFailed);
            // Need to reactivate client side validation
            $.validator.unobtrusive.parse($form);
            // Need to rebind submit event
            submitLogic();
        });
        // Unbind form submitting
        $form.unbind();
        return false;
    });
}

私のリモート検証コード:

    public ActionResult EmailAlreadyExists(string email, int? contactID, ContactTypeEnumViewModel type )
    {
        var contact = _requestServiceClient.GetContactFromEmailAndType(email, (ContactTypeEnumDTO) type);
        return Json((contact == null) || (contact.ContactID == contactID), JsonRequestBehavior.AllowGet);
    }

    public ActionResult NameAlreadyExists(int? contactID, ContactTypeEnumViewModel type, string FirstName, string LastName)
    {
        var contact = _requestServiceClient.GetContactFromFirstNameLastNameAndType(FirstName, LastName, (ContactTypeEnumDTO)type);
        return Json((contact == null) || (contact.ContactID == contactID), JsonRequestBehavior.AllowGet);
    }

私のビューモデル:

public class ContactEditViewModel
{
    public int ContactID { get; set; }

    [Required, Remote("NameAlreadyExists", "Contact", AdditionalFields = "ContactID, Type, FirstName, LastName", ErrorMessageResourceName = "NameAlreadyExists", ErrorMessageResourceType = typeof(UserResource))]
    public string FirstName { get; set; }

    [Required, Remote("NameAlreadyExists", "Contact", AdditionalFields = "ContactID, Type, FirstName, LastName", ErrorMessageResourceName = "NameAlreadyExists", ErrorMessageResourceType = typeof(UserResource))]
    public string LastName { get; set; }

    [Required, EmailRegex, Remote("EmailAlreadyExists", "Contact", AdditionalFields = "ContactID, Type", ErrorMessageResourceName = "EmailAlreadyExists", ErrorMessageResourceType = typeof(UserResource))]
    public string Email { get; set; }
    ...

私は真剣に迷っています:(私は成功せずに数日以来解決策を見つけようとしています.どんな助けも大歓迎です.

良い1日を。

4

0 に答える 0