2015-08-05 1 views
1

J'essaie actuellement de mettre en œuvre une forme Ajax dans MVC 5.Ajax.BeginForm ne fonctionne pas en chrome MVC 5

@using (Ajax.BeginForm("Requirement", "Purchase", null, new AjaxOptions { OnSuccess = "redirectionClick", OnFailure = "Retry", HttpMethod = "POST" }, new { id = "RequirementForm", autocomplete = "off" })) 
{ 
    //Various input fields 
    @Html.AntiForgeryToken() 
    <input type="submit" value="Submit" class="btn btn-primary EqualSized" id="SubmitBtn" style="width:30%"> 
    <input type="button" value="Reset" id="Reset" class="btn btn-primary EqualSized" style="width:30%"> 
} 

Les fonctions sous balise script:

function CloseModals() { 
    $('.modal').modal('hide'); 
    $('body').removeClass('modal-open'); 
    $('div.modal-backdrop').remove(); 
} 

function redirectionClick() { 
    CloseModals(); 
    bootbox.alert("Saved Successfully!"); 
    $.ajax({ 
     url: "@Url.Action("Requirement", "Purchase")", 
     async: false, 
     success: function (result) { 
      $('#PageData').html(result); 
     } 
    }) 
} 

function Retry() { 
    alert('Unknown Error, Please try submitting the form again!'); 
    $('#SubmitBtn').attr('disabled', false); 
} 

$('#SubmitBtn').click(function() { 
    if ($('#RequirementForm').valid()) 
     $(this).attr('disabled', true); 
}); 

Et mon contrôleur:

[HttpPost] 
[ValidateAntiForgeryToken] 
public void Requirement(Requirement Details) 
{ 
    //Logic 
} 

Le code ci-dessus fonctionne dans FireFox et IE, mais pas dans Chrome. Y a-t-il quelque chose qui me manque?

+0

Pourquoi avez-vous 'OnSuccess =" redirectionClick "' ce qui signifie qu'après avoir soumis à la méthode 'Requirement()', vous faites ensuite un autre appel ajax à la même méthode? –

+0

Le 'redirectionClick' est un appel à l'action HttpGet dans le contrôleur. Pour afficher les données actualisées – gvk

+0

Alors, pourquoi ne pas simplement utiliser l'option 'UpdateTargetId' et retourner la partie dans la méthode post? (semble une façon étrange de faire cela - faire 2 appels au lieu de 1) –

Répondre

0

Si un bouton de soumission est désactivé, je ne pense pas qu'il puisse soumettre un formulaire, votre gestionnaire de clic déclenche avant votre gestionnaire de soumission.

essayez de changer votre gestionnaire de clic à ce

$('#SubmitBtn').click(function() { 
    if ($('#RequirementForm').valid()) 
     $(this).prop('disabled', true).closest('form').submit(); 
}); 

L'autre façon est de handler la soumettre sur le formulaire à la place, et désactiver le bouton là-dedans si le formulaire est valide. vous pouvez utiliser l'événement onbegin ou submit pour cela

+0

Le code que j'ai posté fonctionne sur IE et Firefox ... – gvk

+0

Bienvenue dans le monde du web dev, il n'est pas rare de trouver des différences dans le comportement des navigateurs – Slicksim

+0

Cela fonctionne :-) a dû spécifier 'return false;' car le formulaire était soumis deux fois dans IE – gvk