我想为表示为下拉列表的字段类型创建一个编辑器模板。在编辑器模板的定义中,我想使用对控制器上的操作的调用来填充DropDownList,将结果返回为JSON - 任何想法如何执行此操作?
例如:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TheFieldType>" %>
<%= Html.DropDownList(.....
答案 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包下载。