Множественный выбор со списком для / список сообщений опубликовать только последний выбранный элемент - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь сделать множественный выбор с помощью ListBoxFor of Razor, но выборка не позволяет мне выбирать несколько элементов (я могу сделать это, только выбирая мои элементы с помощью Ctr + щелкните второй элемент). Я сократил свой код до минимального, как показано в примере в этом ответе (мой код приведен выше). Кто-нибудь может мне помочь ?? Я в отчаянии.

Моя модель

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"}
};

My View

<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 Ответ

0 голосов
/ 27 марта 2019

Я нашел ошибку. Это не зависит от моего элемента ListBoxFor, это было вызвано кодом js, который я написал для отправки на сервер действия моей формы с дополнительными данными. В основном это было похоже:

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;
   }
...