2010-11-17 83 views
1

我使用的是jQuery Autocomplete Plugin(由jQuery的名人JörnZaefferer)。出現在jQuery中的jQuery UI圖標自動完成結果

後端代碼:

public JsonResult GetCompanyNames() 
    { 
     return Json(Model.CompanyNames); //returns valid JSon 
    } 

相關JS代碼:

$('#CompanyName').autocomplete(['Suzuki', 'Honda', 'blah']); //This works fine 
$('#CompanyName').autocomplete('/Account/Login/GetCompanyNames'); //This renders icons! 

當通過JavaScript數組作爲URL /數據參數爲預計正常工作。

但是,當我通過Area/Controller/Action作爲參數,它顯示了jQuery的ui圖標(呵呵?)在相應的文本框!!?

是的,我希望我可以附上截圖。相信我,我仍然無法相信我的眼睛。

在調試時,我已驗證我的方法返回了有效的JsonResult數據。我使用的是:ASP.NET MVC3,jQuery 1.4.2。我已在Chrome 6.0,IE8和Firefox 3.5中檢查並發現相同的行爲。更新:即使在自動完成請求從服務器返回之前,圖標也會出現。

+1

爲什麼你使用bassistance.de插件,如果你已經使用jQuery UI?該插件不贊成使用jQuery UI版本。 – 2010-11-17 07:57:36

+1

我升級到jQuery UI的自動完成。(雖然並非沒有困難,但它是值得的)。 – 2010-11-18 13:14:18

回答

1

確保允許GET請求:

public ActionResult GetCompanyNames() 
{ 
    return Json(Model.CompanyNames, JsonRequestBehavior.AllowGet); 
} 

另一個祕訣:使用FireBug,看看有什麼確切地在客戶端與服務器和任何可能的錯誤消息之間進行交換。


UPDATE:

的問題來自於你需要使用parseformatItem功能,因爲該插件預期數據以一種特殊的方式被格式化爲手動解析JSON的事實:

$('#CompanyName').autocomplete('/Account/Login/GetCompanyNames', { 
    dataType: 'json', 
    formatItem: function (data, i, max, value, term) { 
     return value; 
    }, 
    parse: function (data) { 
     return $.map(data, function (item) { 
      return { data: item, value: item, result: item }; 
     }); 
    } 
}); 
+0

@Darin:我確實嘗試了以上,但仍然無效。控制檯顯示我這個錯誤消息:「Uncaught TypeError:對象沒有方法'拆分'。」 – 2010-11-17 07:42:17

+0

FireBug說什麼?請求是否發送到服務器?服務器迴應什麼?你是否正在返回完全相同的JSON數組:從你的控制器動作中'[''Suzuki','Honda','blah']'還是一些複雜的對象?您的控制器操作應該像這樣返回:'return Json(new [] {「Suzuki」,「Honda」,「blah」},JsonRequestBehavior.AllowGet);'。你看到:一個字符串數組。 Model.CompanyNames是字符串[]嗎? – 2010-11-17 07:42:58

+0

是,請求被髮送到服務器。服務器響應與預測一致。即。 Model.CompanyNames是一個字符串[]。 Firebug的控制檯不給我警告/錯誤。響應標題包含Content-Type:application/json; charset = utf-8 Status:200 OK – 2010-11-17 07:51:56