使用listboxfor / listbox的多项选择仅发布最后选择的项目

问题描述 投票:0回答:1

我正在尝试使用ListBoxFor of Razor进行多项选择,但是select不允许我选择多个项目(我可以这样做只选择我的项目用Ctr +点击第二项)。我把我的代码减少到最小,就像this answer中显示的例子(我的代码在上面)。谁能帮帮我?我很绝望。

我的模特

public IEnumerable<int> ParoleChiave { get; set; }
public IEnumerable<SelectListItem> ListaParoleChiave { get; set; }

我的控制器

model.ListaParoleChiave = new List<SelectListItem>() {
    new SelectListItem(){  Text = "Pro", Value = "2"},
    new SelectListItem(){  Text = "Test", Value = "3"}
};

我的看法

<div class="form-group form-group-sm">
    <label class="col-xs-12">Parole chiave</label>
    <div class="col-xs-12">
        @Html.ListBoxFor(m => m.ParoleChiave, Model.ListaParoleChiave, new { @class = "form-control", style = "width: 100%" })                        
    </div>
</div>
c# razor model-view-controller multi-select html.listboxfor
1个回答
0
投票

我发现了错误。它不依赖于我的ListBoxFor元素,它是由我编写的js代码发布到服务器操作我的formData与其他数据。基本上它就像:

data: function (d) {                                                 
        var fd = new FormData(myForm[0]);
        for (var pair of fd.entries()) {
           d[pair[0]] = pair[1];
        }                                         
        return d;
    }    

我发现了多个值,其中发布了FormData的两个条目(键/值对)但具有相同的键名,因此我的代码用第二个条目覆盖了第一个条目。我用上面的代码替换了,现在它就像一个魅力。

data: function (d) {                                           
        var fd = new FormData(myForm[0]);
        for (var pair of fd.entries()) { 
            var occurenceOfKey = Array.from(fd.keys()).reduce(function (n, val) {
                 return n + (val === pair[0]);
            }, 0);
            if (occurenceOfKey > 1)                                                        
                d[pair[0]] = fd.getAll(pair[0]);              
            else
                d[pair[0]] = pair[1]; 
        }                                                             
        return d;
   }
© www.soinside.com 2019 - 2024. All rights reserved.