MVC 5 & jQuery:以编程方式将多个项目添加到下拉列表

MVC5 & jQuery: Programatically add several items to dropdown

我对使用 MVC5 很陌生。我有一个下拉列表,选择后它会触发控制器和控制器 returns 项目列表。我想将这些项目添加到另一个下拉列表中。

.cshtml

<select class="comboBox" id="urunGrubu">
<option></option>
</select>

脚本

    function getCinsItem() {
    var value = document.getElementById("urunCinsi").value;
    $.ajax({
        dataType: "html",
        type: "POST",
        url: "/Kuyumcu/UrunEkle1",
        data: { k: value },
        success: function (data) {
            var select = document.getElementById("urunGrubu");
            for (index in data) {
                select.options[select.options.length] = new Option(data[index], index);
            }
        }       
    });
}

来自控制器的 returns 值:

'["14 AYAR","18 AYAR","21 AYAR","22 AYAR","24 AYAR","8 AYAR","HURDA","SADE"]'

这会将列表中的所有字母作为选项添加到下拉列表中。我怎样才能抓住单词而不是字母?

您不需要 select 中的 <option> 并且在循环中也不需要像这样指定要使用的选项 select.options[select.options.length]

获取数据时,只需将new Option(即一个元素)附加到DOM中的select元素即可。

编辑: 因为我们在评论中谈到,你说当数据来自控制器时它说类型是 string,这意味着你没有真正的数组,你只有这个数组的字符串表示。
那么,你需要什么? a 在迭代它之前可能解析一个 JSON.parse(data),以避免对每个字符进行迭代。

下面是解析的例子:.

var data = '["14 AYAR","18 AYAR","21 AYAR","22 AYAR","24 AYAR","8 AYAR","HURDA","SADE"]'
//Above is a string that came from controller
console.log("Type before parse:", typeof data)

var select = document.getElementById("urunGrubu");

data = JSON.parse(data)
console.log("Type after parse:", typeof data) //parsed as an object/array

for (index in data) {
    select.append(new Option(data[index], index));
}
<select class="comboBox" id="urunGrubu">
</select>

我不确定我是否正确理解了你的问题。

我觉得您想将数组中的每一项添加为下拉列表的新选项。

如果是这样,那么您提供的代码就很好用。 我没有问题重现此 jsFiddle 的行为(注释行也有效)


根据您的意见进行编辑: 您声明一个字符串返回到您的 ajax 请求,这是完全可行的,如 Calvin Nunes 的回答所示。

但是如果您不想将字符串解析为数组或来自客户端的 json对象,您可以从此更新您的控制器方法:

public IActionResult UrunEkle1(TypeOfParameter k)
{
   //Retrieve the data you have to return
   return data;
}

对此:

public JsonResult UrunEkle1(TypeOfParameter k)
{
   //Retrieve the data you have to return
   return Json(data);
}

从现在开始,您无需解析结果即可将其用作 json 或数组,这在检索复杂数据集(例如列表)时非常有用自定义 class。您可以这样使用此列表:

select.options[select.options.length] = new Option(data[index].label, data[index].id, data[index].isDefaultSelected, data[index].isSelected);

希望它完成接受的答案!

window.populateDropdown = function() {
  var select = document.getElementById("urunGrubu");
  for (var index in data) {
    select.options[select.options.length] = new Option(data[index], index);
    //select.options.add(new Option(data[index], index));
  }
}
var data = ["14 AYAR", "18 AYAR", "21 AYAR", "22 AYAR", "24 AYAR", "8 AYAR", "HURDA", "SADE"]
<select class="comboBox" id="urunGrubu">
  <option>Default Option</option>
</select>
<button type="button" onclick="populateDropdown()">
Trigger
</button>

当然,第一个标签是完全可选的,仅对 "Select an option"

等指令有用