我正在尝试将几个参数从jquery传递给mvc控制器,但该方法正在接收空值,即使调试器显示浏览器调试器中的两个控件的val()都存在。
$(function () {
$('#Counties').cascade({
data: JSON.stringify('{state: ' + $("#States").val() + ', county: ' + $("#Counties").val() + '}'),
url: '@Url.Action("GetCities")',
childSelect: $('#Cities')
});
});
我在下面的答案中尝试了两种方法,一种是使用JSON.stringify而不是。这些值仍然是null
这是更新的代码。我在另一篇文章中读到,我可能需要为该方法编写一个Route。我补充说,但这不起作用
$(function () {
$('#Counties').cascade({
data: {state: $("#States").val(), county: $("#Counties").val()},
url: '@Url.Action("GetCities")',
childSelect: $('#Cities')
});
});
[HttpGet]
public ActionResult GetCities(string state, string county)
{
var cities = _carrierRouteAssignmentRepository.GetCities(state, county);
return Json(cities, JsonRequestBehavior.AllowGet);
}
routes.MapRoute(
name: "GetCities",
url: "{controller}/{action}/{state}/{county}",
defaults: new { controller = "CarrierRouteAssignments", action = "GetCities", state = UrlParameter.Optional, county = UrlParameter.Optional }
);
运行fiddler我看到请求以
的形式出现/CarrierRouteAssignments/GetCities?undefined=LOS+ANGELES
哪个不正确
答案 0 :(得分:1)
您应该将对象传递给JSON.stringify()
方法,目前您正在传递字符串
使用
data: JSON.stringify({
state: $("#States").val() ,
county: $("#Counties").val()
}),
而不是
data: JSON.stringify('{state: ' + $("#States").val() + ', county: ' + $("#Counties").val() + '}'),
答案 1 :(得分:0)
尝试以下
$(function () {
$('#Counties').cascade({
data:{ state: $("#States").val() , county: $("#Counties").val() },
url: '@Url.Action("GetCities")',
childSelect: $('#Cities')
});
});
答案 2 :(得分:0)
我刚刚意识到问题所在。我正在使用此post中的辅助方法,并没有查找问题。我也没有在原来的问题中发布这个。正如您将注意到,辅助方法只需要1个参数,这是传递给帮助程序的参数。我要么必须扩展这个帮助器,要么绕过最后一个下拉列表级联。感谢所有的投入。它确实解决了一个问题。
(function ($) {
$.fn.cascade = function (options) {
var defaults = {};
var opts = $.extend(defaults, options);
return this.each(function () {
$(this).change(function () {
var selectedValue = $(this).val();
var params = {};
params[opts.paramName] = selectedValue;
$.getJSON(opts.url, params, function (items) {
opts.childSelect.empty();
$.each(items, function (index, item) {
opts.childSelect.append(
$('<option/>')
.attr('value', item)
.text(item)
);
});
});
});
});
};
})(jQuery);