2014-09-25 56 views
1

我正在開發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} 
] 

我不明白爲什麼這不起作用。

+0

那麼,你的代碼片段在'$('#mySelect)'中缺少關閉''''。這是在你的項目中糾正? – jrummell 2014-09-25 19:32:41

+0

是的。修復代碼片段。 – user70192 2014-09-25 19:35:44

+0

我沒有看到名爲'text'的json中的屬性。除非你在功能處理程序中以某種方式重寫了行爲,否則每個項目都需要'id'和'text'屬性。 – AaronLS 2014-09-25 19:40:12

回答

1

documentation

選擇二提供了一些快捷方式,可以很容易地訪問存儲陣列中的本地數據 ...

...這樣的陣列必須有「身份證」和「文本」鍵。

您的JSON對象不包含「ID」或「文本」鍵:)這應該的工作,雖然我沒有測試它:

results: function (data, page) { 
    return { results: data, id: 'Id', text: 'Name' } 
} 

有替代鍵鏈接下面進一步的文件綁定...我相信那是你的問題所在。

希望這會有所幫助。

+0

你好,但爲什麼我的控制器中的'startsWith'參數沒有填充? – user70192 2014-09-26 01:11:38

+0

我認爲它是同樣的問題...嘗試用'data:{startsWith:'Test'}替換'data:function(term,page){...}''' – wahwahwah 2014-09-27 03:32:08

+0

這應該會觸發您的控制器。 Select 2 ajax「快捷方式」只是包裝一個正常的ajax調用。 – wahwahwah 2014-09-27 03:43:09