я следующее Simpified ViewModel в C#Связывание observableArray в список C#
public class SearchViewModel
{
public IList<IdAndNameModel> AvailableTags { get; set; }
public IList<IdAndNameModel> SearchTags { get; set; }
}
и это в JavaScript:
function ViewModel() {
var self = this;
self.allTags = ko.observableArray();
self.searchTags = ko.observableArray();
// stuff to fill the searchTags
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
viewModel.allTags(@Html.Raw(Json.Encode(@Model.AvailableTags)));
Теперь я хочу, чтобы связать свойство JavaScript в SearchModel
:
@Html.HiddenFor(m => m.SearchTags, new { data_bind = "value: searchTags" })
Вот фрагмент того, как данные передаются контроллеру:
$('#submitButton').click(function() {
var form = $('#criteriaForm');
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: form.serialize(),
success: function (result) {
// unimportant binding stuff
}
});
});
К сожалению, длина списка всегда равен 0. небось причиной является инициализация массива availabaleTags (@Html.Raw(Json.Encode(@Model.AvailableTags))
). Я не ошибаюсь? Если я изменил тип из списка на строку, то я вижу, что привязка обычно работает.
Есть ли способ связать списки таким образом?
Когда и как вы проверяете длину списка? Итак, откуда вы знаете, что длина списка всегда равна 0? – nemesv
Сторона контроллера после отправки. – core
ОК, и как вы отправляете свои данные? С помощью обычного тега формы и кнопки отправки или с AJAX? – nemesv