2011-03-09 12 views
6

Tengo un <select> que está cargado por un JSon. Pero quiero usar "@ html.dropdownlist helper" en su lugar. Mi JSON es:Cómo llenar un @ mtml.dropdownlist asistente de mvc utilizando JSon

function LoadSites() { 
$("SelectSite").html(""); 
$.getJSON("/Pedido/GetSite", null, function (data) { 
    $("#SelectSite").append("<option value=0>Selecione...</option>"); 
    $.each(data.Result, function (index, site) { 
     $("#SelectSite").append("<option value='" + site.Id + "'>" + site.Nome + "</option>"); 
    }); 
}); 

este JSON pueblan este ...

<select id="SelectSite"></select> 

mi controlador:

 [HttpGet] 
    public JsonResult GetSite() 
    { 
     Repository<Site> siteRepo = new Repository<Site>(unitOfWork.Session); 
     return this.Json(new { Result = siteRepo.All() }, JsonRequestBehavior.AllowGet); 
    } 

Quiero mi código reutilizable y más auto-documentado. ¿Cómo puedo enviar el objeto "sitio" de JSon a "cshtml" usando la lista desplegable para hacer algo como @html.dropdownlist(site.id, site.Nome) ???

¿Hay alguna manera?

Tks chicos.

Respuesta

18

En su opinión:

@Html.DropDownListFor(x => x.SiteId, new SelectList(Enumerable.Empty<SelectListItem>())) 

donde SiteId es una propiedad de nuestro modelo de vista que recibirá el ID de sitio seleccionado cuando se envía el formulario.

y entonces se podría llenar esta lista desplegable usando AJAX:

$(function() { 
    $.getJSON('@Url.Action("GetSite", "Pedido")', function(result) { 
     var ddl = $('#SiteId'); 
     ddl.empty(); 
     $(result).each(function() { 
      ddl.append(
       $('<option/>', { 
        value: this.Id 
       }).html(this.Nome) 
      ); 
     }); 
    }); 
}); 

y la acción del controlador que devolver los datos JSON:

public ActionResult GetSite() 
{ 
    var sites = new[] 
    { 
     new { Id = "1", Nome = "site 1" }, 
     new { Id = "2", Nome = "site 3" }, 
     new { Id = "3", Nome = "site 3" }, 
    }; 
    return Json(sites, JsonRequestBehavior.AllowGet); 
} 
+0

¿Qué debo hacer en caso de que quiero llenar desplegable de cargarse? http://stackoverflow.com/questions/5389571/formcollection-not-containing-select-control-added-in-mvc-razor – Vijay

+0

Gracias Darin Dimitrov.Me ayuda –

+0

@darin Si hay un error de modelo y vuelve a la vista, la opción seleccionada se me fue, supongo, porque está cargada a pedido cuando busco. ¿Sabes cómo arreglar eso? Tengo que escribir 3 letras antes de que busque una selección para elegir –

Cuestiones relacionadas