2010-12-14 80 views
1

我在ASP.net MVC 2中創建一個自動填充字段。問題是輸入字段只是旋轉,沒有自動完成數據或「無結果」消息出現。JQuery自動完成結果不會出現

我有一個搜索控制器,使用LIKE語句從數據庫中檢索LastNames。這個控制器從下面的JavaScript函數被調用:

$('#author').autocomplete('~/edit/search.mvc', { 
    delay: 200, 
    minChars: 2 
}); 

這一切工作正常。我可以調試到搜索控制器,它將傳遞搜索文本(q)並將結果提取到return語句。控制器在下面。

//Method to return author searches 
public JsonResult Search(string q) 
{ 
    var locateFacultyDto = new LocateFacultyMemberDto() { SearchText = q }; 
    var result = _facultyMemberModel.LocateFacilityMembersByLastNameLike(locateFacultyDto, 10); 

    var lastNames = new List<string>(); 

    foreach (var facultyMember in result.FacultyMembers) 
    { 
     lastNames.Add(facultyMember.LastName); 
    } 


    return Json(lastNames, JsonRequestBehavior.AllowGet); 
} 

但是,在HTML(Spark)頁面中沒有顯示任何結果。我有一個非常簡單的文本輸入:

<input id="author" type="text" /> 

任何想法?我無法進一步調試搜索控制器的結尾,但一切似乎都很好。

+0

我無法幫助您使用ASP,但您是否嘗試過使用Chrome/FF中的調試器來查看您的腳本是否真的通過AJAX傳回? – Fred 2010-12-15 00:21:45

回答

1

OK,我想通了感謝下面的帖子和評論上:

http://blogs.msdn.com/b/joecar/archive/2009/01/08/autocomplete-with-asp-net-mvc-and-jquery.aspx

發佈結果代碼的情況下,它可以幫助別人。

Javascript:這會調用'編輯'控制器中的'搜索'方法(詳情如下)。添加「解析」功能是關鍵,這在我上面提供的鏈接中進行了解釋:

訣竅是將此數據轉換爲自動完成功能期望的格式。如果您使用本地數據,則自動完成需要一個字符串數組。由於我們的數據是以JSON對象的形式存在的,因此我們將使用解析選項將我們的JSON對象格式化爲自動完成功能可以使用的數據。

分析函數未記錄非常好,但它基本上會以我們的JSON對象,並返回由三個必備部分對象的數組:

  1. 數據:這是我的JSON整個項目對象:{ 「ID」:13, 「名稱」: 「TEST3」, 「計數」:1}

  2. 值:這是我想顯示的值:TEST3

  3. 結果:這是值在我選擇標籤fr後,我想添加到我的輸入(txtStoryTags)中OM下拉:TEST3

完整的JavaScript函數:

$('#author').autocomplete('~/edit/search.mvc', { 
    dataType: 'json', 
    parse: function(data) { 
     var rows = new Array(); 
     for (var i = 0; i < data.length; i++) { 
     rows[i] = {data: data[i], value: data[i].Name, result: data[i].Id }; 
    } 
     return rows; 
    }, 
    formatItem: function(row) { 
    return row.Name; 
    }, 
delay: 40, 
autofill: true, 
selectFirst: false, 
highlight: false, 
minChars: 2 
}); 

的ASP.net MVC 2控制器:

//Method to return author search results as JSON 
    public JsonResult Search(string q) //autocomplete passes a variable 'q' containing the search text 
    { 
     var locateFacultyDto = new LocateFacultyMemberDto() { SearchText = q }; 
     var authors = _facultyMemberModel.LocateFacilityMembersByLastNameLike(locateFacultyDto, 10); 

     var results = new List<Object>(); //All we need is the name and ID 
     //anonymnous object for JSON result. 
     foreach (var author in authors.FacultyMembers) 
     { 
      results.Add(new 
      { 
       Name = (author.LastName + ", " + author.FirstNames), 
       Id = author.Id 
      }); 
     } 

中提琴!自動完成列出了在搜索結果中的用戶名,並在選擇一個名字插入ID進入該領域,這簡直是:

<input id="author" type="text" /> 

謝謝大家!

1

我會建議在firefox中使用firebug看看實際響應回來的是什麼。

+0

如果我在Search構造函數中取出LastNames並傳回由「\ n」分隔的字符串數組,則它可以正常工作。理想情況下,傳回名稱和ID會很好。 – Ian 2010-12-15 15:30:05

+0

所以這個問題只發生在我返回一個JSON時,Firebug確認它正在到達OK。如果我返回一個包含NAME和ID的JSON,那麼是否有辦法讓NAME出現在自動完成中,並將ID保存在某個隱藏字段中? – Ian 2010-12-15 17:33:36