私は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))
) の初期化にあると思います。私は正しいですよ?タイプをリストから文字列に変更すると、バインディングが一般的に機能していることがわかります。
そのようにリストをバインドする方法はありますか?