Selon mes commentaires, il y a plusieurs choses qui pourraient causer cette situation.
- Vous devez avoir le fichier discret (s) chargé plusieurs fois
- Votre formulaire a une méthode d'action défini, et le bouton se trouve dans la balise form comme un bouton d'envoi. Cela soumettre le formulaire, puis le clic également soumettre le formulaire - voir l'exemple
Exemple
<form action="/somerowout/someaction">
<input type="text" id="text1"/>
<input type="text" id="text1"/>
<input type="submit" />
</form>
Si vous devez valider une valeur sur votre formulaire avant de poster, ne pas raccorder un appel Ajax supplémentaire. Votre javascript ressemblera:
$(document).ready(function() {
$("form").submit(function(){
var result = $("#enrolledStudents").sortable('toArray');
if(result == null){
//do something to show validation failed
return false;
}
return true;
});
});
Et votre code de forme serait alors ressembler à quelque chose comme:
@using (@Ajax.BeginForm(new AjaxOptions { })) {
<input type="text" id="text1"/>
<input type="text" id="text1"/>
<input type="submit" />
}
Si vous voulez utiliser Ajax plutôt que les Helpers Html, utilisez un div au lieu d'un formulaire, et vous ne recevrez pas un message en double.Voici comment vous pouvez y parvenir:
<div id="enrolledStudents">
<--! your elements -->
<button id="saveStudents">Save</button>
</div>
JavaScript
$(document).ready(function() {
$("saveStudents").click(function(){
var result = $("#enrolledStudents").sortable('toArray');
if(result !== null){ /* do some kind of check here. */
$.ajax({
url: '@Url.Action("Enrollment", "Classroom")',
data: { students: result },
type: 'POST',
traditional: true,
success : function(data) {
if (data.status) {
window.location = data.route;
}
}
})
} else {
/* notify ui that save didn't happpen */
}
});
});
Exemple Action Controller Lorsque vous rédigez vos données en utilisant Ajax, voici un exemple de la façon de passer la route
[HttpPost]
public ActionResult SomethingPost(SomeModel model) {
if (Request.IsAjaxRequest()) {
var json = new {
status = true,
route = @Url.RouteUrl("MyRouteName", new { /* route values */ })
};
return Json(json, JsonRequestBehavior.AllowGet);
}
}
Regardez vos scripts chargés et assurez-vous que le (s) fichier (s) discret (s) ne sont pas chargés deux fois. J'ai vu cela se produire lorsque les événements sont accrochés deux fois. Aussi, le bouton "update-enroll" est-il un bouton de type submit? Si c'est le cas, alors vous accrochez un événement pour cliquer sur le bouton qui envoie le formulaire et ensuite vous faites un autre appel. Pouvez-vous fournir le code HTML du formulaire? – anAgent
Oui, je devais faire ça? J'ai un résultat var variable .... que j'ai besoin de passer en paramètre et si je ne l'ai pas fait de cette façon, il apparaîtrait comme NULL, comment puis-je résoudre ce problème? Je préférerais ne pas accrocher un événement pour cliquer sur le bouton. –
Voir ma réponse ci-dessous. – anAgent