2010-09-30 16 views
17

Volevo creare un modello di editor per un tipo di campo che è rappresentato come elenco a discesa. Nella definizione del modello di editor mi piacerebbe popolare il DropDownList utilizzando una chiamata a un'azione sul controller che restituisce i risultati come JSON - Qualche idea su come farlo?ASP.NET MVC Html.DropDownList popolato dalla chiamata Ajax al controller?

esempio qualcosa come:

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

Sembra un lavoro per un metodo di estensione su HtmlHelper che utilizza un metodo di controllo, ecc. Cosa hai ottenuto finora? – bzlm

risposta

61

in Editor modello fornire una discesa vuoto:

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

Poi impostare un azione di controllo che restituirà i valori:

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

E quindi compila i valori utilizzando 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

Sembra fantastico - ci proverò e tornerò. – UpTheCreek

+2

Anche se questa soluzione ha 3 anni, funziona ancora a meraviglia. Grazie, Darin. – shazia

+0

come creare il modello per questo Suresh

3

So che questo post ha qualche anno ma l'ho trovato e così potresti. Io uso la seguente soluzione e funziona molto bene. Forte digitato senza la necessità di scrivere una singola riga di Javascript.

mvc4ajaxdropdownlist.codeplex.com

È possibile scaricare tramite Visual Studio come un pacchetto NuGet.

Problemi correlati