2017-01-24 3 views
1

ajax呼び出しからselectタグをロードしようとしています。 select文をロードすることができますが、値を代入しようとすると失敗します。助けてくれてありがとう!MVCノックアウトタグ値の割り当てを選択します。

HTMLコード

<select data-bind="value: state, options: allStates, optionsText: 'name', optionsValue: 'abbreviation', optionsCaption:'Please pick a state...'" class="form-control" id="state" name="state"></select>' 

var cSource = function (data) { 
    var self = this;' 
    self.state = ko.observable(data.state); 
    self.allStates = ko.observableArray([]); 

// get the list of states from the server 
$.getJSON('@Url.Action("AllStates", "Home")', function(myData) { 
    // myDate is a list of states 
    self.allStates(myData); 
}); 

Not Assigned

var modelData = @Html.Raw(Json.Encode(Model)); // does not contain a list of states 
    mySource = new cSource(modelData); 
    ko.applyBindings(mySource); 

C#オブジェクト

public static List<cStates> usStates() 
{ 
     List<cStates> myStates = new List<cStates>(); 
     myStates.Add(new cStates() { abbreviation = "AL", name = "ALABAMA" }); 
     myStates.Add(new cStates() { abbreviation = "AK", name = "ALASKA" }); 
     .... 
     return myStates; 
} 

コントローラ

public ActionResult AllStates() 
    { 
     return Json(ChoiceProducts.States.BLL.cStates.usStates(), JsonRequestBehavior.AllowGet); 
    } 

javascript jsonオブジェクトから状態をロードすると、それが動作します。

var states = [{"name": "Alabama","abbreviation": "AL"},{"name": "Alaska", 
    "abbreviation": "AK"},..... 
self.state = ko.observable(data.state); 
self.allStates = ko.observableArray(states); 

Properly Assigned

+0

ajax呼び出しの状態を更新しようとしていますか?または、値がページの読み込みに割り当てられないと言っていますか? –

+0

どうすれば失敗しますか?コンソールにエラーを表示してください –

+0

この値はページの読み込みに割り当てられません。 self.state = ko.observable(data.state); //この行は機能しません – TheWiz

答えて

0

は、サーバーからのデータのためにノックアウトのko.utils.arrayMapを使用する必要があります。ここ

var mappedState = ko.utils.arrayMap(stateObjectFromServer, function(item) { 
    return new State(item.name, item.abbreviation); 
}); 

そして、それを支援するための素晴らしいリソースです:適用する前にバインディングは何かが好きです

http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

0

コントローラ、私は

ViewBag.myStates = ChoiceProducts.States.BLL.cStates.usStates(); 

HTMLを追加し、私は

を追加しました
self.allStates = ko.observableArray(@Html.Raw(Json.Encode(ViewBag.myStates))); 

それはうまくいった。私は別の方法でAJAXコールを行う必要はありませんでした。

関連する問題