我正在開發ASP.NET MVC 4應用程序。在我的應用程序中,我試圖用Select 2 plugin替換我的下拉列表。目前,我在從ASP.NET MVC控制器加載數據時遇到問題。我的控制器看起來是這樣的:在ASP.NET MVC中使用Select 2
public class MyController : System.Web.Http.ApiController
{
[ResponseType(typeof(IEnumerable<MyItem>))]
public IHttpActionResult Get(string startsWith)
{
IEnumerable<MyItem> results = MyItem.LoadAll();
List<MyItem> temp = results.ToList<MyItem>();
var filtered = temp.Where(r => r.Name.ToLower().StartsWith(startsWith.ToLower());
return Ok(filtered);
}
}
當我設置在這個代碼中設置斷點,我注意到,startsWith
不具有價值斷點被擊中手段的事實(我認爲)我下面url
屬性設置正確。但是,我不知道爲什麼startsWith
沒有設置。我是從選擇2使用下面的JavaScript調用它:
function formatItem(item) {
console.log(item);
}
function formatSelectedItem(item) {
console.log(item);
}
$('#mySelect').select2({
placeholder: 'Search for an item',
minimumInputLength: 3,
ajax: {
url: '/api/my',
dataType: 'jsonp',
quietMillis: 150,
data: function (term, page) {
return {
startsWith: term
};
},
results: function (data, page) {
return { results: data };
}
},
formatResult: formatItem,
formatSelection: formatSelectedItem
});
運行此代碼時,我在選擇2下拉列表中唯一看到的是Loading failed
。但是,我知道我的api正在被調用。我可以在小提琴手看到一個200回來。我甚至可以看到JSON結果,如下所示:
[
{"Id":1,"TypeId":2,"Name":"Test", "CreatedOn":"2013-07-20T15:10:31.67","CreatedBy":1},{"Id":2,"TypeId":2,"Name":"Another Item","CreatedOn":"2013-07-21T16:10:31.67","CreatedBy":1}
]
我不明白爲什麼這不起作用。
那麼,你的代碼片段在'$('#mySelect)'中缺少關閉''''。這是在你的項目中糾正? – jrummell 2014-09-25 19:32:41
是的。修復代碼片段。 – user70192 2014-09-25 19:35:44
我沒有看到名爲'text'的json中的屬性。除非你在功能處理程序中以某種方式重寫了行爲,否則每個項目都需要'id'和'text'屬性。 – AaronLS 2014-09-25 19:40:12