2012-04-20 6 views
2

Lorsque je clique sur le bouton soumettre, je vais directement à mon action. Les 2 suivants ne se produisent pas:MVC3 - Razor, Ajax.BeginForm - côté client - OnBegin

  1. La méthode beginForm côté client n'est pas appelée pour l'instant. Ce que je veux.
  2. Request.IsAjaxRequest est faux, même si mon modèle a l'entrée sous forme

Essayer de trouver une réponse à ce problème. Le même code fonctionne dans MVC2, donc je dois manquer quelque chose ici.

Après 2 fichiers js MS sont référencés:

<!-- MS AJAX --> 
<script type="text/javascript" src="/Scripts/MicrosoftAjax.js"></script> 
<script type="text/javascript" src="/Scripts/MicrosoftMvcAjax.js"></script> 

Code Forme:

@{ 
     using (Ajax.BeginForm(ActionNames.Index, ControllerNames.CustomerSearch, new {Area = ""}, new AjaxOptions 
                             { 
                              HttpMethod = "Post", 
                              OnBegin = "CustomerSearch.beginForm", 
                              OnSuccess = "CustomerSearch.successForm" 
                             }, new {id = "CustomerSearchForm"})) 
     { 

... form items ... 
} 
} 

formulaire tel qu'il apparaît sur la page:

<form action="/CustomerSearch" data-ajax="true" data-ajax-begin="CustomerSearch.beginForm" data-ajax-method="Post" data-ajax-success="CustomerSearch.successForm" id="CustomerSearchForm" method="post"> 

... Other Form Items ... 
<input type="image" src="/App_Themes/Main/Images/ResponseAction/Buttons/btn_submit.gif" alt="Submit" id="SubmitButton" /> 
</form> 

Et voici mon CustomerSearch. js, sur l'alerte de chargement de la page (2) montre très bien:

var CustomerSearch = { 
    enums: { 
     buttonId: "SubmitButton", 
     searchResultsContainerId: "CustomerSearchResults" 
    }, 
    beginForm: function() { 
     alert(1); 
     var $button = $("#" + CustomerSearch.enums.buttonId); 
     jMessage("Processing request...", $button, true, false); 
     return true; 
    }, 
    successForm: function (context) { 
     var $button = $("#" + CustomerSearch.enums.buttonId); 
     var $searchResults = $("#" + CustomerSearch.enums.searchResultsContainerId); 
     var data = context.get_data(); 

     jMessageHide(); 
     $searchResults.html(data).fadeIn(500); 
    } 
}; 

alert(2); 

Mon javascript discret activé est défini sur true dans web.config:

<add key="ClientValidationEnabled" value="true"/> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

Répondre

2

With MVC3 les aides discrètes Ajax:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax .BeginForm
  • Ajax.BeginRouteForm

utilisent le fichier jquery.unobtrusive.ajax.js.

Vous avez donc besoin d'inclure ce js fichier au lieu de ceux MicrosoftAjax (fichiers MicrosoftAjax sont dépréciés dans MVC3 et non livrés avec bêta MVC4):

<script type="text/javascript" src="/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
+0

Obtenir tard pour la classe, va vérifier comme Dès que je suis de retour. –

+0

Merci pour votre aide. J'utilise maintenant jquery $ .ajax. A également aidé: http://stackoverflow.com/questions/5410055/using-ajax-beginform-with-asp-net-mvc-3-razor –

Questions connexes