ASP.NET MVC Html.DropDownList填充Ajax调用控制器?

时间:2010-09-30 11:28:04

标签: asp.net-mvc asp.net-mvc-2

我想为表示为下拉列表的字段类型创建一个编辑器模板。在编辑器模板的定义中,我想使用对控制器上的操作的调用来填充DropDownList,将结果返回为JSON - 任何想法如何执行此操作?

例如:

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

2 个答案:

答案 0 :(得分:64)

在编辑器模板中提供一个空的下拉列表:

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

答案 1 :(得分:3)

我知道这篇文章已经有几年了但是我找到了,所以你也可以。我使用以下解决方案,它工作得很好。强类型而无需编写单行Javascript。

mvc4ajaxdropdownlist.codeplex.com

您可以通过Visual Studio将其作为NuGet包下载。