2015-12-04 1 views
0

Je suis en train de publier des données dans un contrôleur, mais il ne semble pas fonctionner, j'ai besoin de la poste pour inclure le contenu de la vue dans un div quand terminé mais je ne peux pas y arriverAjax post ne fonctionne pas MVC 5

Voilà ma fonction js:

function show(num) { 
    $.ajax({ 
     dataType: "html", 
     type: "POST", 
     url: "Student/Schedule", 
     data: { number: num }, 
     success: function (a) { 
      // Replace the div's content with the page method's return. 
      alert("success"); 
      $('#schedule').load(a); 
     } 
    }); 
} 

et, voici mon contrôleur:

public ActionResult Schedule(String number) 
{ 
    return View(number); 
} 

Je suis un noob dans MVC et C#, de sorte que toute aide est la bienvenue.

+0

avez-vous décoré votre action avec '[HttpPost]'? – rogerdeuce

+1

Quels sont les résultats? Avez-vous une erreur? –

+0

pas d'erreur, la fonction done ne tourne même pas –

Répondre

2

Il y a des choses que vous devez corriger pour résoudre le problème.

  • changement Url "/Student/Schedule"

    Vous utilisez "Student/Schedule" comme URL, de sorte que vous essayez d'appeler une action nommée "étudiant".

  • Ajoutez [HttpPost] à votre action.

  • Vous devriez return PartialView("Schedule", number);.

    Lorsque vous utilisez return View(number), il utilise la valeur chaîne de nombre comme nom de vue. Vous devez explicitement passer le nom et le modèle de la vue.

  • Utilisez $('#schedule').html(a);

Il est préférable d'ajouter une fonction d'erreur à votre appel ajax être en mesure de trouver des erreurs:

error: function (jqXHR, textStatus, errorThrown) { 
    alert(errorThrown); 
    //or you can put jqXHR.responseText somewhere as complete response. Its html. 
} 
+0

Pour l'électeur abaissé, Considérez un commentaire sur la raison du vote à la baisse. –

+0

Pas le downvoter ici, mais OP dit qu'il récupère la vue depuis le serveur, donc apparemment il frappe l'action désirée. –

+0

Pas downvoter non plus, vrai, je reçois ma vue en arrière, ill détruire ce downvote –

1

Votre action doit retourner une vue partielle, pas de vue.

Changer votre action:

[HttpPost] 
// by the way use string instead of String 
public ActionResult Schedule(string number) 
{ 
    return PartialView("_Schedule", number); 
} 

Ensuite, vous devrez créer une vue partielle du nom _Schedule.cshtml.

En outre, vous devez changer $('#schedule').load(a);-$('#schedule').html(a); Et, je vous suggère d'utiliser un Url.Action pour définir votre URL dans votre appel ajax, comme ceci:

function show(num) { 
    $.ajax({ 
     dataType: "html", 
     type: "POST", 
     url: '@Url.Action("Schedule", "Student")', 
     data: { number: num }, 
     success: function (a) { 
      // Replace the div's content with the page method's return. 
      alert("success"); 
      $('#schedule').html(a); 
     } 
    }); 
} 
1

J'ai eu la même question que je a été d'ajouter jquery.unobtrusive-ajax.js à mes scripts

+2

Cela ne répond pas vraiment à la question. Si vous avez une question différente, vous pouvez le demander en cliquant sur [Poser une question] (http://stackoverflow.com/questions/ask). Vous pouvez également [ajouter une prime] (http://stackoverflow.com/help/privileges/set-bounties) pour attirer davantage l'attention sur cette question. - [À revoir] (/ review/low-quality-posts/10444892) – jnovo

+0

Ok, peut-être que je ne me suis pas correctement exprimé –

+1

Réponse reformulé –