级联下拉菜单在 mvc 中返回未定义
Posted
技术标签:
【中文标题】级联下拉菜单在 mvc 中返回未定义【英文标题】:Cascading dropdowns are returning undefined in mvc 【发布时间】:2021-03-16 09:08:36 【问题描述】:我知道这里的很多其他人都有这个问题。但这是我关于此事的问题。
我在 homecontroller 中的 Json 调用:
public JsonResult GetBrand(int id)
List<String> resultdata = new List<String>();
//get some data via sql query
using (SqlCommand command = new SqlCommand(query, sqlconn))
using (SqlDataReader reader = command.ExecuteReader())
while (reader.Read())
resultdata.Add(reader.GetString(0));
return Json(resultdata, JsonRequestBehavior.AllowGet);
我的第二个下拉菜单的代码:
@html.DropDownList("Brand", new SelectList(string.Empty, "", ""), "Please select", new @class = "form-control" )
我也试过了:
@Html.DropDownList("Brand", new SelectList(string.Empty, "div_id ", "material_name "), "Please select", new @class = "form-control" )
还有我的脚本:
$(document).ready(function ()
$("#category").change(function ()
$.get("GetBrand", id: $("#category").val() , function (data)
console.log(data);
$("#Brand").empty();
$.each(data, function (index, row)
console.log(row);
$("#Brand").append("<option value='" + row.div_id + "'>" + row.material_name + "</option>")
);
);
)
);
在 Chrome 的 F12 控制台上,我可以在下拉列表中看到我想要返回的实际数据列表,并且它是正确的(通过 console.log(row);)。 但是,在下拉列表本身中,它显示为未定义。
有人对我缺少的东西有什么建议吗?
【问题讨论】:
在控制台上打印row
时得到什么值?
我得到了品牌名称,例如:品牌 1、品牌 2 等。它应该如何显示在下拉列表中。
如果我在 Json 调用中这样做: return Json(new SelectList(resultdata, "div_id", "material_name"), JsonRequestBehavior.AllowGet);我收到一个错误:内部服务器错误(500)
所以我认为我的 Json 调用是正确的,脚本或 Dropdown 本身有问题???
在$.get("GetBrand", .... )
你需要这样写:$.get("/Home/GetBrand" ,...)
。它没有获取控制器操作方法的路径,因此出现错误。路径也区分大小写。因此,请确保您编写的控制器名称与您在创建控制器时给出的完全一致。
【参考方案1】:
这是我为任何也缺少如此简单的东西的人提供的解决方案:
while (reader.Read())
items.Add(new SelectListItem
Value = Convert.ToString(Convert.ToInt32(reader["div_id"])),
Text = reader["material_name"].ToString()
);
现在它返回值。
【讨论】:
以上是关于级联下拉菜单在 mvc 中返回未定义的主要内容,如果未能解决你的问题,请参考以下文章
MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据