Select2ドロップダウンボックスに入力するjquery/ajaxの記述についてサポートが必要です。
Select2が何であるかを知らない人のために、これは、TwitterBootstrapの外観と検索/先行入力機能をhtml選択リストのドロップダウンボックスに提供するjavascript拡張機能です。詳細については、こちらの例をご覧ください:Select2Githubページ
更新-解決しました!
だから私はついにこれをすべてまとめました、そして私の問題の解決策は私が結果とリスト選択をフォーマットするための機能を欠いていることでした。以下のコードは、先行入力が完全に機能するSelect2ドロップボックスを生成します。
コントローラーのJsonメソッド:
public JsonResult FetchItems(string query)
{
DatabaseContext dbContext = new DatabaseContext(); //init dbContext
List<Item> itemsList = dbContext.Items.ToList(); //fetch list of items from db table
List<Item> resultsList = new List<Item>; //create empty results list
foreach(var item in itemsList)
{
//if any item contains the query string
if (item.ItemName.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0)
{
resultsList.Add(item); //then add item to the results list
}
}
resultsList.Sort(delegate(Item c1, Item c2) { return c1.ItemName.CompareTo(c2.ItemName); }); //sort the results list alphabetically by ItemName
var serialisedJson = from result in resultsList //serialise the results list into json
select new
{
name = result.ItemName, //each json object will have
id = result.ItemID //these two variables [name, id]
};
return Json(serialisedJson , JsonRequestBehavior.AllowGet); //return the serialised results list
}
上記のJsonコントローラーメソッドは、シリアル化されたJsonオブジェクトのリストを返します。そのItemNameには、提供された文字列'query'が含まれます(この'query'は、Select2ドロップボックスの検索ボックスから取得されます)。
以下のコードは、 Select2ドロップボックスを強化するためのビュー(または必要に応じてレイアウト)のJavascriptです。
Javascript:
$("#hiddenHtmlInput").select2({
initSelection: function (element, callback) {
var elementText = "@ViewBag.currentItemName";
callback({ "name": elementText });
},
placeholder: "Select an Item",
allowClear: true,
style: "display: inline-block",
minimumInputLength: 2, //you can specify a min. query length to return results
ajax:{
cache: false,
dataType: "json",
type: "GET",
url: "@Url.Action("JsonControllerMethod", "ControllerName")",
data: function (searchTerm) {
return { query: searchTerm };
},
results: function (data) {
return {results: data};
}
},
formatResult: itemFormatResult,
formatSelection: function(item){
return item.name;
}
escapeMarkup: function (m) { return m; }
});
次に、ビューの本体に、 Select2がドロップボックスをレンダリングする非表示の入力要素が必要です。
HTML:
<input id="hiddenHtmlInput" type="hidden" class="bigdrop" style="width: 30%" value=""/>
または、MVC Razor html.hidden要素をビューモデルにアタッチして、選択したアイテムIDをサーバーにポストバックできるようにします。
Html(MVC Razor):
@Html.HiddenFor(m => m.ItemModel.ItemId, new { id = "hiddenHtmlInput", @class = "bigdrop", style = "width: 30%", placeholder = "Select an Item" })