使用 listboxfor/listbox 进行多项选择,仅发布最后一个选定项目

Posted

技术标签:

【中文标题】使用 listboxfor/listbox 进行多项选择,仅发布最后一个选定项目【英文标题】:Multiple selection with listboxfor/listbox post only last selected item 【发布时间】:2019-08-18 09:06:01 【问题描述】:

我正在尝试使用 Razor 的 ListBoxFor 进行多项选择,但该选择不允许我选择多个项目(我只能通过 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>

【问题讨论】:

【参考方案1】:

我发现了错误。这不取决于我的 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;
   

【讨论】:

以上是关于使用 listboxfor/listbox 进行多项选择,仅发布最后一个选定项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Istio 进行多集群部署管理:多控制平面

Python 多线程 和 多进程的CPU使用情况进行对比

使用KNN模型进行多输出分类实战(Multioutput Classification)

使用KNN模型进行多标签分类实战(Multilabel Classification)

使用 Mongoose 进行多对多映射

使用下拉列表框进行多选