0

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

そのようにリストをバインドする方法はありますか?

4

2 に答える 2

0

それらを個別に送信したくない場合は、次を試してみてください。knockout には C# リストに関するこの問題があるため、C# 側とやり取りしているときに元に戻す必要があります。

data: JSON.stringify(ko.mapping.toJS(yourobject))

于 2013-11-20T12:20:41.240 に答える