0

ノックアウト js が入力された 2 つのドロップダウン リストがあり、2 つの質問があります。

1)これが Model.StreetList から入力される理由

@Html.DropDownListFor(m => m.SelectedStreet, Model.StreetList, new {onchange = "FetchHouses();"})

しかし、これはそうではありません

    @Html.DropDownListFor(m => m.SelectedStreet, Model.StreetList, new {onchange = "FetchHouses();", @data_bind = "options: StreetList, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Select...'"})

モデルからデフォルトでデータを取り込むことは可能ですが、何らかのイベントが発生した場合は、ノックアウト バインディングでデータを取り込むことができますか?

2) フォームの送信後、ModelState が無効な場合、これら 2 つのドロップリストの選択された値は失われます。これを解決するにはどうすればよいですか?

<p>
    @Html.LabelFor(m => m.SelectedStreet, @Resources.RegistrationStreet)
    @Html.DropDownListFor(m => m.SelectedStreet, Model.StreetList, new {onchange = "FetchHouses();", @data_bind = "options: StreetList, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Select...'"})
</p>
<p>
    @Html.LabelFor(m => m.SelectedHouse, @Resources.RegistrationHouse)
    @Html.DropDownListFor(m => m.SelectedHouse, Model.HouseList, new { @data_bind="options: HouseList, optionsText: 'Number', optionsValue: 'Id'"})
</p>

どんな助けでも大歓迎です!

編集:

ノックアウト.jsバインディングは変更イベントで発生し、正常に動作します.問題は、変更イベントが発生していない間に、MVCモデルからドロップダウンを作成したいということです.バインディングを行うjsコードは次のとおりです:

function CascadingDdLViewModelStreet() {
    this.StreetList = ko.observableArray([]);
    this.HouseList = ko.observableArray([]);
}

var objVMStreet = new CascadingDdLViewModelStreet();
ko.applyBindings(objVMStreet);

function FetchStreets() {
    objVMStreet.HouseList([]);
    objVMStreet.StreetList([]);
    var cityCode = $("#SelectedCity").val();
    $.getJSON("/Account/GetStreets/" + cityCode, null, function(data) {
        objVMStreet.StreetList(data);
    });

}

function FetchHouses() {
    var streetCode = $("#SelectedStreet").val();
    $.getJSON("/Account/GetHouses/" + streetCode, null, function(data) {
        objVMStreet.HouseList(data);
    });
}

完全なコードは次のとおりです。

表示: http://pastebin.com/jva9ff8A

モデル: http://pastebin.com/vDQkg0d5

コントローラー: http://pastebin.com/avBuRy9D

4

1 に答える 1

1

1. ko モデルに MVC モデルのデータを次のように入力してみてください。

function CascadingDdLViewModelStreet() {
  this.StreetList = ko.observableArray(@Html.Raw(Json.Encode(Model.StreetList)));
  this.HouseList = ko.observableArray([]);
}

2. SelectedStreet と SelectedHouse をビューに戻して、モデルを (無効であっても) 渡す必要があります。

于 2013-02-21T10:14:41.347 に答える