MVC ListBox没有将数据传递给Action

当我使用FireBug时,我看到selectedPrdLctn的选定值正确设置但是当我通过JSON将其传递给我的动作时,它是一个null

$.getJSON('@Url.Action("GetCS")', { cntrParam: selectedPrdLctn }, function (getCS) { 

我的行动

  public ActionResult GetCS(String[] cntrParam) 

如果我使用dropDownList,代码可以工作。 知道为什么我没有通过选择吗?

我怀疑问题来自于你没有设置traditional参数这一事实,而jQuery没有以默认模型绑定器能够理解的格式发送集合。 如果您使用的是jQuery 1.4或更高版本,则必须设置此参数。

例如:

模型:

 public class MyViewModel { public string[] SelectedValues { get; set; } public IEnumerable Items { get; set; } } 

控制器:

 public class HomeController : Controller { public ActionResult Index() { var model = new MyViewModel { Items = new[] { new SelectListItem { Value = "1", Text = "item 1" }, new SelectListItem { Value = "2", Text = "item 2" }, new SelectListItem { Value = "3", Text = "item 3" }, new SelectListItem { Value = "4", Text = "item 4" }, } }; return View(model); } public ActionResult GetCS(string[] values) { return Json(new { message = string.Format("{0} item(s) selected", values.Length) }, JsonRequestBehavior.AllowGet); } } 

视图:

 @model MyViewModel @Html.ListBoxFor( x => x.SelectedValues, Model.Items, new { id = "mylist", } ) @Html.ActionLink("Send AJAX", "getcs", null, new { id = "mylink" }) 

脚本:

 $(function () { $('#mylink').click(function () { var selectedValues = $('#mylist').val(); $.getJSON(this.href, $.param({ values: selectedValues }, true), function (result) { alert(result.message); }); return false; }); }); 

注意我如何使用$.param函数并将其作为表示传统参数的第二个参数传递给true。 尝试使用truefalse调用它,您将看到FireBug中的差异,如果不设置此参数,您将理解为什么它不起作用。

您还可以为所有AJAX请求全局设置此参数:

 $.ajaxSetup({ traditional: true }); 

然后以下将工作:

 $.getJSON(this.href, { values: selectedValues }, function (result) { alert(result.message); });