2010-09-21 3 views
3

Я пытаюсь получить JQuery Automcomplete вещь, чтобы работать, но оно не будет делать, как я хочу: P Это мой код:JQuery UI автозаполнения с 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 
       }; 
    } 

я получаю запрос от $.ajax и я возвращал правильный список клиентов по поисковому запросу. И вызывается метод success. Я вижу, что data имеет значение [object Object], но что мне делать дальше? В моем списке нет клиентов. Я использую код response($.map... от http://jqueryui.com/demos/autocomplete/#remote-jsonp, но он просто не работает.

Кто-нибудь знает почему?

+0

Вы можете использовать диагностический инструмент/отладки, такие как Firebug (плагин) для FF, Инструменты разработчика (F12 для IE или Ctrl + Сдвиг + J для Chrome), чтобы увидеть именно то, что возвращается браузеру и как его обрабатывают? –

ответ

1

Я использую это перед моим первым запросом AJAX - я уверен, что это поможет. Определяет стандартные элементы и берет на себя атрибут «d», который microsoft помещает в качестве атрибута верхнего уровня.

$.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

Ничего себе, спасибо! Он сделал трюк, и теперь все работает. Мне пришлось удалить 'contentType:" application/json; charset = utf-8 "', хотя, поскольку, когда у меня было это на 'term', было' null' внутри 'Search (string term)'. – Martin

+0

Добро пожаловать. Это было первоначально написано для работы с ASP.NET 2.0 - возможно, для новых DLL не нужен contentType ... не уверен в этом. – Hogan