我在 C# 中有以下简化的 ViewModel
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))
)的初始化。我是对的?如果我将类型从列表更改为字符串,那么我可以看到绑定通常有效。
有没有办法以这种方式绑定列表?