いくつかのリモート検証を使用した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日を。