Подтвердить что ты не робот

ASP.NET MVC Html.DropDownList, заполненный вызовом Ajax для контроллера?

Я хотел создать шаблон редактора для типа поля, который представлен в виде выпадающего списка. В определении шаблона редактора я хотел бы заполнить DropDownList, используя вызов действия на контроллере, возвращающего результаты в виде JSON. Любые идеи, как это сделать?

Например, например:

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

Ответ 1

В шаблоне редактора укажите пустое раскрывающееся меню:

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

Затем настройте действие контроллера, которое вернет значения:

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

И затем заполнить значения с помощью 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

Я знаю, что этот пост - несколько лет, но я нашел его, и вы тоже. Я использую следующее решение, и оно работает очень хорошо. Сильная типизация без необходимости писать одну строку Javascript.

mvc4ajaxdropdownlist.codeplex.com

Вы можете загрузить его через Visual Studio в виде пакета NuGet.