2010-09-30 26 views
17

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?ASP.NET MVC Html.DropDownList poblado por Ajax llamada al controlador?

Por ejemplo, algo como:

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

Suena como un trabajo para un método de extensión en el HtmlHelper que tiene un método de controlador, etc. ¿Qué has conseguido hasta ahora? – bzlm

Respuesta

61

En el editor de plantillas proporcionan un desplegable vacío:

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

A continuación, configurar 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 llene 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); 
     }); 
    }); 
}); 
+2

Esto se ve muy bien, lo intentaré y volveré. – UpTheCreek

+2

Aunque, esta solución tiene 3 años, todavía funciona de maravilla. Gracias Darin. – shazia

+0

cómo crear el modelo para este Suresh

3

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

Se puede descargar a través de Visual Studio como un paquete NuGet.

Cuestiones relacionadas