如何使用JSon填充@html.dropdownlist mvc帮助器

Thi*_*ago 6 json razor asp.net-mvc-3

我有一个<select>由JSon加载的.但我想用"@html.dropdownlist helper"代替.我的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>");
    });
});
Run Code Online (Sandbox Code Playgroud)

这个Json填充了这个......

<select id="SelectSite"></select>
Run Code Online (Sandbox Code Playgroud)

我的控制器:

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

我希望我的代码更可重用和自我记录.如何使用dropdownlist将对象"site"从JSon发送到"cshtml"来执行类似的操作@html.dropdownlist(site.id, site.Nome)

有办法吗?

Tks伙计们

Dar*_*rov 18

在你看来:

@Html.DropDownListFor(x => x.SiteId, new SelectList(Enumerable.Empty<SelectListItem>()))
Run Code Online (Sandbox Code Playgroud)

SiteId视图模型的属性在哪里,在提交表单时将接收选定的网站ID.

然后你可以使用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)
            );
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

以及将返回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);
}
Run Code Online (Sandbox Code Playgroud)