级联下拉菜单在 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 中返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

JsonResult 的下拉菜单返回未定义

MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据

使用 C# 在 ASP.NET MVC 3 中创建级联下拉列表的最简单方法

级联选择/下拉菜单

尝试创建 CSS 下拉菜单时未定义接收“$”

ASP+ACCESS 级联下拉菜单