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。 尝试使用true
和false
调用它,您将看到FireBug中的差异,如果不设置此参数,您将理解为什么它不起作用。
您还可以为所有AJAX请求全局设置此参数:
$.ajaxSetup({ traditional: true });
然后以下将工作:
$.getJSON(this.href, { values: selectedValues }, function (result) { alert(result.message); });