我正在尝试根据其他下拉列表的选择填充一个下拉列表。这就是我现在所拥有的。
这是作为参数接收第一个下拉列表的选定值的函数:
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetTownsForCounty(string selectedCounty)
{
List<SelectListItem> list = new List<SelectListItem>();
list.Add(new SelectListItem{Text=selectedCounty+"1", Value=selectedCounty+"1", Selected=false});
list.Add(new SelectListItem{Text=selectedCounty+"2", Value=selectedCounty+"2", Selected=false});
list.Add(new SelectListItem{Text=selectedCounty+"3", Value=selectedCounty+"3", Selected=false});
var dropdowndata = list;
return Json(dropdowndata, JsonRequestBehavior.AllowGet);
}
在视图中:
@Html.DropDownListFor(item => item.County, counties)
@Html.DropDownListFor(item => item.Town, new List<SelectListItem>())
我的javascript:
$.get("/Subscription/GetTownsForCounty", { selectedCounty: county }, function (dropdowndata) {
console.log(dropdowndata)
var select = $("#Town");
select.empty();
$.each(dropdowndata, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
我做错了什么?
如果我从路线配置中删除下一行,它可以工作:
routes.MapRoute(name: "Subscription",
url: "subscription/{id}/{name}",
defaults: new {
controller="Subscription",
action="Index",
id=UrlParameter.Optional,
name=UrlParameter.Optional});
如果没有,响应(dropdowndata)是页面的html。为什么呢?
答案 0 :(得分:2)
您删除的路线为subscription/{id}/{name}
,这意味着当您尝试申请/Subscription/GetTownsForCounty
时,它会尝试将GetTownsForCountry
作为Id
参数传递到索引操作,而不是调用GetTownsForCountry
操作。当您删除此内容时,它可能会回退到{controller}/{action}/{id}
的默认路由,以便您的请求调用正确的操作。
您正在尝试返回不正确的JSON序列化SelectListItems
。您应该只将原始数据作为JSON返回,并在客户端上构建选择选项。它仍然可以使用SelectListItem,因为它最终只是创建具有这些属性的对象,但你真的不应该这样做,因为你有效地创建控件,转向数据,转向控件,不是一个好的模式。
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetTownsForCounty(string selectedCounty)
{
List<object> list = new List<object>();
list.Add(new {Text=selectedCounty+"1", Value=selectedCounty+"1"});
list.Add(new {Text=selectedCounty+"2", Value=selectedCounty+"2"});
list.Add(new {Text=selectedCounty+"3", Value=selectedCounty+"3"});
return Json(list, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:0)
没有理由在控制器上生成SelectList
,因为这是一个视图问题。
尝试
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetTownsForCounty(string selectedCounty)
{
var list = new List<object>();
list.Add(new object { Text = selectedCounty + "1", Value = selectedCounty + "1" });
list.Add(new object { Text = selectedCounty + "2", Value = selectedCounty + "2" });
list.Add(new object { Text = selectedCounty + "3", Value = selectedCounty + "3" });
return Json(list, JsonRequestBehavior.AllowGet);
}