ASP.NET MVC Html.DropDownList poblado por Ajax llamada al controlador?

Quería crear una plantilla de editor para un tipo de campo que se representa como una lista desplegable. En la definición de la plantilla del editor, me gustaría completar DropDownList utilizando una llamada a una acción en el controlador que devuelve los resultados como JSON: ¿Alguna idea de cómo hacer esto?

Por ejemplo, algo como:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <%= Html.DropDownList(..... 

En la plantilla del editor, proporcione un menú desplegable vacío:

 <%= Html.DropDownListFor( x => x.PropertyToHoldSelectedValue, Enumerable.Empty(), "-- Loading Values --", new { id = "foo" }) %> 

Luego configure una acción de controlador que devolverá los valores:

 public class FooController: Controller { public ActionResult Index() { return Json(new[] { new { Id = 1, Value = "value 1" }, new { Id = 2, Value = "value 2" }, new { Id = 3, Value = "value 3" }, }, JsonRequestBehavior.AllowGet); } } 

Y luego rellene los valores usando AJAX:

 $(function() { $.getJSON('/foo/index', function(result) { var ddl = $('#foo'); ddl.empty(); $(result).each(function() { $(document.createElement('option')) .attr('value', this.Id) .text(this.Value) .appendTo(ddl); }); }); }); 

Sé que esta publicación tiene algunos años, pero la encontré y usted también. Uso la siguiente solución y funciona muy bien. Fuerte tipeado sin la necesidad de escribir una sola línea de Javascript.

mvc4ajaxdropdownlist.codeplex.com

Puede descargarlo a través de Visual Studio como un paquete NuGet.