Rellene el cuadro desplegable Select2 de la base de datos en MVC 4

Necesito ayuda para escribir el jquery / ajax para llenar unSelect2 caja desplegable.

Para quienes no saben queSelect2 Es decir, es una extensión de javascript para proporcionar la apariencia de Twitter Bootstrap y la función de búsqueda / escritura anticipada en un cuadro desplegable de lista de selección html. Para más información mira los ejemplos aquí:Página Select2 Github

ACTUALIZADO - ¡Resuelto!

Así que finalmente puse todo esto junto, y la solución a mis problemas fue que me faltaban funciones para formatear los resultados y la selección de la lista. El siguiente código produce un funcionamientoSelect2 Dropbox con tipografía anticipada perfectamente.

Método Json en el controlador:

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
}

El método del controlador Json anterior devuelve una lista de objetos Json serializados, cuyo ItemName contiene la cadena 'consulta' proporcionada (esta 'consulta' proviene del cuadro de búsqueda en elSelect2&nbsp;caja de la gota).

El código a continuación es el Javascript en la vista (o diseño si lo prefiere) para alimentar elSelect2&nbsp;caja de la gota.

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

Luego, en el cuerpo de la vista, necesita un elemento de entrada oculto, queSelect2&nbsp;renderizará el dropbox a.

HTML:

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

O adjunte un elemento html.hidden de MVC Razor a su modelo de vista para que pueda publicar el Id del elemento seleccionado de nuevo en el servidor.

Html (MVC Razor):

@Html.HiddenFor(m => m.ItemModel.ItemId, new { id = "hiddenHtmlInput", @class = "bigdrop", style = "width: 30%", placeholder = "Select an Item" })