Remplir Select2 zone de liste déroulante à partir de la base de données en MVC 4

J'ai besoin d'aide pour rédiger le jquery/ajax pour remplir un Select2 zone de liste déroulante.

Pour ceux qui ne savent pas ce Select2 est, c'est un javascript extension de fournir Twitter Bootstrap regards et de la recherche /type-ahead de la fonctionnalité html, sélectionnez la liste déroulante de la boîte. Pour plus d'informations, regardez les exemples ici: Select2 page Github


Mise à JOUR - Résolu!


Donc j'ai finalement mis tous ensemble, et la solution à mon problème était que j'étais en manque de fonctions pour formater les résultats et la liste de sélection. Le code ci-dessous génère un fonctionnement Select2 dropbox de la frappe parfaitement.

Json Méthode du Contrôleur:

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
}

Le Json contrôleur de la méthode ci-dessus renvoie une liste de sérialisés objets Json, dont le nom de l'élément contient la chaîne "query" fourni (cette "requête" de la boîte de recherche dans le Select2 boîte de dépôt).

Le code ci-dessous est le code Javascript dans la vue(ou de mise en page si vous préférez) pour l'alimentation de l' Select2 de la boîte de dépôt.

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; }
});

Ensuite dans le corps de la vue que vous avez besoin d'un caché élément d'Entrée, qui Select2 rendu de la dropbox.

Html:

<input id="hiddenHtmlInput" type="hidden" class="bigdrop" style="width: 30%" value=""/>

Ou joindre un MVC, Razor html.élément masqué pour votre modèle de vue pour vous permettre de publier choisi l'Id de l'élément vers le serveur.

Html (MVC, Razor):

@Html.HiddenFor(m => m.ItemModel.ItemId, new { id = "hiddenHtmlInput", @class = "bigdrop", style = "width: 30%", placeholder = "Select an Item" })
J'ai juste fait ça hier, bien que normale à la liste déroulante. Vous utilisez SelectListItem. Je peux donner le code mais qu'est-ce que "Select2"?
Select2 est un plugin supplémentaire qui donne des zones de liste déroulante avec v. nice fonctionnalités dans un Bootstrap de style. ivaynberg.github.com/select2

OriginalL'auteur Whiplash450 | 2013-02-13