2010-09-21 8 views
3

Je suis en train de faire la chose jQuery Automcomplete au travail, mais il ne fera pas comme je veux: P Ceci est mon code:jQuery UI Autocomplete avec ASP MVC

JavaScript:

 $("#CustomerID").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        type: "POST", 
        url: "/customer/search", 
        dataType: "json", 
        data: { 
         term: request.term 
        }, 
        error: function(xhr, textStatus, errorThrown) { 
         alert('Error: ' + xhr.responseText); 
        }, 
        success: function(data) { 
         response($.map(data, function(c) { 
          return { 
           label: c.Company, 
           value: c.ID 
          } 
         })); 
        } 
       }); 
      }, 
      minLength: 2, 
      select: function(event, ui) { 
       alert('Select'); 
      } 
     }); 

ASP MVC:

[AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult Search(string term) 
    { 
     if (term == null) 
      term = ""; 

     List<JSON_Customer> customers = repCustomer.FindCustomers(term).ToList(); 
     return Json(customers); 
    } 

    public class JSON_Customer 
    { 
     public int ID { get; set; } 
     public string Company { get; set; } 
    } 

    public IQueryable<JSON_Customer> FindCustomers(string searchText) 
    { 
     return from c in _db.Customers 
       where c.Company.Contains(searchText) 
       orderby c.Company 
       select new JSON_Customer 
       { 
        ID = c.ID, 
        Company = c.Company 
       }; 
    } 

je reçois la demande de $.ajax et je retourne la liste correcte des clients selon le terme de recherche. Et la méthode success est appelée. Je peux voir que data a une valeur de [object Object] mais que dois-je faire ensuite? Aucun client ne tombe dans ma liste. J'utilise le code response($.map... du http://jqueryui.com/demos/autocomplete/#remote-jsonp mais cela ne marchera pas.

Quelqu'un sait pourquoi?

+0

Pouvez-vous utiliser un outil de débogage de diagnostic/tel que Firebug (plugin) pour FF, Outils de développement (F12 pour IE ou Ctrl + Maj + J pour Chrome) pour voir exactement ce qui est retourné au navigateur, et comment il est traité? –

Répondre

1

Je l'utilise avant ma première demande AJAX - je parie que cela aidera. Définit les éléments standard et prend en charge l'attribut "d" que Microsoft met en tant qu'attribut de niveau supérieur.

$.ajaxSetup({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: "{}", 
    dataFilter: function(data) { 
     var msg; 

     if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') 
      msg = JSON.parse(data); 
     else 
      msg = eval('(' + data + ')'); 

     if (msg.hasOwnProperty('d')) 
      return msg.d; 
     else 
      return msg; 
    } 
    }); 
+0

Wow, merci! Il a fait l'affaire, et maintenant tout fonctionne. J'ai dû supprimer l'application 'contentType:"/json; charset = utf-8 "' cependant, puisque quand je l'avais sur le 'term' était' null' dans 'Search (string term)'. – Martin

+0

De rien. Cela a été écrit à l'origine pour fonctionner avec ASP.NET 2.0 - il se peut que les DLL plus récentes n'aient pas besoin du contentType ... pas sûr à ce sujet. – Hogan