Выбивающее начальное значение JS select отображается некорректно внутри цикла foreach

#c# #asp.net-mvc #knockout.js

#c# #asp.net-mvc #knockout.js

Вопрос:

У меня есть случай, когда у меня есть список элементов, и для каждого из них мне нужно отобразить выпадающий список, который редактирует определенное поле

случается так, что когда я редактирую выделение и сохраняю, изменение привязывается и сохраняется правильно.

но когда я загружаю страницу в первый раз, все выбранные значения отражают самый первый элемент (значение игнорируется)

   <tbody data-bind="foreach: Model.Items">

    ///something

          <select data-bind="value: Fieldvalue,options: $root.optionslist,  optionsValue: 'Id', optionsText: 'Name'"></select>

    ///something

  </tbody>
 

Ответ №1:

Вот пример, в котором я устанавливаю начальные значения, а затем загружается DOM и привязываются значения. Он работает так, как и ожидалось. Возможно, ваша проблема кроется в какой-то другой части кода, которую вы нам не показали.

 var viewmodel = function(){
  
  this.Model = {
    Items: [
      {Fieldvalue: ko.observable(2)},
      {Fieldvalue: ko.observable(3)}
    ]
  };
  this.optionslist = [
    {Id: 1, Name: 'option 1'},
    {Id: 2, Name: 'option 2'},
    {Id: 3, Name: 'option 3'}
  ];
};

ko.applyBindings(new viewmodel()); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>


<div data-bind="foreach: Model.Items">
    <select data-bind="value: Fieldvalue,
                       options: $root.optionslist,  
                       optionsValue: 'Id', 
                       optionsText: 'Name'"></select>
</div> 

Комментарии:

1. Я использовал тот же код, который я опубликовал выше, с набором моделей так же, как вы установили свой, и тогда это сработало, но поскольку я заполняю его из модели, которую я получил через AJAX-вызов, моя модель была назначена с помощью ko.viewmodel.fromModel , и, вероятно, проблема заключается в этой строке