2014-05-21 2 views
0
exécute

Donc, fondamentalement Voici ce que je fais:faisant .ajax demande au contrôleur mvc - mais .done fonction ne

dans le corps - méthode onload j'appelle cette fonction javascript

 function TestN() { 
      var list = new Array(); 
      var allElements = document.getElementsByTagName('*'); 

      $("*[wordNum]").each(function() 
      { 
       var endRes = { 
        ControllerName: this.id, 
        WordNumber: this.getAttribute("wordNum") 
       }; 

       list.push(endRes); 


      }); 


      jQuery.ajax({ 
       url:' @Url.Action("Translate")' , 
       contentType: "application/json", 
       dataType: "json", 
       data: { List : JSON.stringify(list) } 
, 
       traditional: true 

      }) 
     } 

ce qu'il fait - il recherche tous les contrôleurs avec l'attribut "WrdNum" et ensuite je fais une requête ajax à l'action MVC Translate!

Dans le Traduire Action Je fais une demande à un service Web qui alimente une liste de type - TranslateModel

public ActionResult Translate(string List) 
     { 

     List<TranslateModel>listto = WebServiceBea.TranslateList(1, List); 

     return View(listto); 

    } 

Aussi Voici mon translateModel

public class TranslateModel 
    { 
     public string ControllerName { get; set; } 
     public string WordNumber { get; set; } 
     public string Description { get; set; } 
    } 

Donc, fondamentalement, ma question est -> Quel type dois-je retourner à une vue -> et comment retourner cette liste à une fonction javascript ou jquery qui doit définir la propriété innerHtml de certains contrôles html avec l'enregistrement de cette liste. **

je maintenant que c'est étrange, mais qui est ma tâche


EDIT

Merci beaucoup pour l'aide. Mais maintenant j'ai un autre problème:

Après avoir changé mon javascript et mis. méthode fait pour que je puisse obtenir les données du serveur, il ressemble à ceci:

$ (document) .ready (function() { liste var = new Array();

 $("*[wordNum]").each(function() { 
      var endRes = { 
       ControllerName: this.id, 
       WordNumber: this.getAttribute("wordNum") 
      }; 

      list.push(endRes); 


     }); 


     jQuery.ajax({ 
      url: ' @Url.Action("Translate")', 
      contentType: "application/json", 
      dataType: "json", 
      data: { List: JSON.stringify(list) } 

, traditionnel: true,

 }).done(function (result) 
     { 


      alert ("HII") ; 


     }); 
    }); 

peu importe ce que je mets dans la fonction .done il exécute jamais il semble que le contrôleur ne sait pas où retourner le résultat | I | ne pas peut maintenant quelque chose... arriver du fait que je fais cette demande en om la page .layout - sur document prêt. s

+1

Est-ce que ça va * seulement * appeler de javascript? Si oui, la chose la plus facile à faire serait de retourner la liste comme json et l'analyser avec javascript? – mituw16

Répondre

4

cela ressemble à un endroit de bienvenue à utiliser knockout js. est ici un grand step by step pour utiliser knock-out avec la vue mvc

si la méthode ne retournera JSON, la vue pas un modèle juste un appel pour obtenir le JSON

si vous allez utiliser $ .post pour tirer vos données, vous pouvez retourner votre liste JSON

[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)] 
public ActionResult Translate(string List) 
{ 

    List<TranslateModel>listto = WebServiceBea.TranslateList(1, modelObj); 

    return Json(listto); 
} 

Regarder ce que vous envoyez des messages à la méthode d'action, il devrait être déjà une liste de ce type. MVC devrait faire le gros du travail et le transformer en objets que vous avez.

si toutefois vous souhaitez gérer vous-même retour que vous pouvez faire quelque chose comme

  jQuery.ajax({ 
      url:' @Url.Action("Translate")' , 
      contentType: "application/json", 
      dataType: "json", 
      data: { List : JSON.stringify(list) }, 
      traditional: true 

     }).success(function(returnData, returnStatus) 
     { 
      //some code to handle the list of objects reutrned 
     }); 
+0

Bonjour - merci beaucoup! J'ai ajouté un code qui, je suppose, clarifierait la situation. et je serais vraiment reconnaissant pour plus d'aide –

+0

quel est le but de l'envoi de la liste à l'action? Ne voulez-vous pas obtenir la liste de l'action basée sur une var? juste besoin d'éclaircissements. – workabyte

+0

Donc, comme je l'ai dit quand MVC a cessé de rendre la vue et que le html est prêt, j'ai des commandes spéciales avec l'attribut "wrdNum". Je colecte leurs valeurs et les envoie à Action Translate. Than basé sur cet argument Traduire l'action remplit une liste; et en quelque sorte cette liste doit être reçue par la fonction javascript afin que je puisse définir certains attributs de ces contrôles spéciaux –

2

Vous avez déjà une réponse, mais considérer ce qui suit pour les cas où vous pourriez avoir des actions de contrôleur appelées par javascript:

public ActionResult GetItems(string id) 
{ 
    var MyList = db.GetItems(id);//returns a list of items 
    if (Request.IsAjaxRequest())//called from javascript via AJAX 
     { 
      return Json(MyList, JsonRequestBehavior.AllowGet); 
     } 
     else //regular hyperlink click 
     { 
      return View(MyList); 
     } 
} 

Pour utiliser la liste, procédez comme suit

$.ajax({url: "'@Url.Content("~/controllername/GetItems")?id=' + id"}) 
.done(function(result){ 
     var mylist = result.responseText.evalJSON();//this is your list of items 
     for(i=0;i<mylist .length;i++) 
     { 
      var myitem = mylist[i]; 
     } 

    }); 
+0

pouvez-vous m'aider - comment obtenir cette liste dans le javascript: peut-être dans la requête ajax je devrais mettre le succès: SOmeFunction() –

0

NEVERRRR NEVERRR Forge pour mettre jsonRequestBehavior.AllowGet

Merci beaucoup pour tout le monde pour l'aide

Questions connexes