2015-03-25 52 views
1

我是ASP.NET MVC開發人員。我是Knockout js的新手,目前我在應用程序中使用KO js。 Dropdownlist選擇更改(.subcribe)無法正常工作。請在下面找到我的代碼:.subscribe在我的ASP.NET MVC應用程序中不起作用

我的任務是:有三個下拉列表,我必須將數據綁定到第一個下拉列表的更改事件上的下一個下拉列表。 enter image description here 腳本:

var array_BankNames = JSON.parse(@Html.Raw(ViewBag.Banks)); 


    var Bank = function() { 
     var self = this; 
     self.BankName = ko.observableArray(array_BankNames); 
     self.SelectedBank = ko.observable(); 

     self.BankLocation = ko.observableArray(); 
     self.SelectedLocation = ko.observable(); 

     self.BankBranch = ko.observableArray(); 
     self.SelectedBranch = ko.observable(); 

     self.SelectedBank.subscribe = function() { 
      alert("Hi");    
      $.ajax({ 
       url: '@Url.Action("GetBankLocations_Data")', 
       data: { Bankname: selectedValue }, 
       type: 'GET', 
       success: function (data) { 
        self.BankLocation(data); 
       } 
      }); 
     }.bind(self); 
    }; 

    var BanksModel = function() { 
     var self = this; 
     self.Banks = ko.observableArray([new Bank()]); 

     self.addBank = function() { 
      self.Banks.push(new Bank()); 
     }; 

     self.removeBank = function (Bank) { 
      self.Banks.remove(Bank); 
     }; 
    }; 
    ko.applyBindings(new BanksModel()); 

HTML:

     <div class="col-sm-9 col-md-8 controls">        
           <select data-bind=" 
            options: BankName, 
            optionsValue: 'ID', 
            optionsText: 'Name', 
            value: SelectedBank"> 
          </select> 
         </div> 
        </div> 
       </div> 
       <div class="col-md-6"> 
        <div class="form-group"> 
         @Html.LabelFor(model => model.BankLocation, new { @class = "col-sm-3 col-md-4 control-label" }) 
         <div class="col-sm-9 col-md-8 controls"> 

          <select data-bind="options: BankLocation, 
          optionsValue: 'ID', optionsText: 'Name', value: $root.SelectedLocation"> 
          </select> 
         </div> 
        </div> 
       </div> 
      </div> 

      <div class="col-md-12"> 
       <div class="col-md-6"> 
        <div class="form-group"> 
         @Html.LabelFor(model => model.BankBranch, new { @class = "col-sm-3 col-md-4 control-label" }) 
         <div class="col-sm-9 col-md-8 controls"> 

          <select data-bind="options: BankBranch, 
            optionsValue: 'ID', optionsText: 'Name', value: SelectedBranch"> 
          </select> 
         </div> 
        </div> 
       </div> 
+0

'.subscribe'應該可以正常工作。控制檯中有任何錯誤?讓我們知道。歡呼聲 – 2015-03-25 12:23:07

+0

此參考顯示錯誤。所以刪除它。刪除該引用後,控制檯中沒有錯誤。 – 2015-03-25 12:29:48

+0

由於沒有錯誤,現在訂閱解僱?如果不刪除所有引用(暫時),只需將jquery 1.9.js放置在開始和下一個knockout-3.2.0.js並執行即可。希望它能正常工作 – 2015-03-25 13:03:15

回答

0

我得到了我的問題的答案:

self.LoadLocations = ko.computed(function() { 
       var tempreview = self.SelectedBank(); 
       return tempreview; 
      }), 
      self.LoadLocations.subscribe(function (newValue) { 
       $.ajax({ 
        url: '@Url.Action("GetBankLocations_Data")', 
        data: { Bankname: newValue }, 
        type: 'GET', 
        success: function (data) { 
         self.BankLocation(data); 
        } 
       }); 
      }); 

這是在我的項目中級聯下拉列表的腳本。

0

從AJAX回調的背景下,該模型是不BanksModel,這是self ......這樣:

self.SelectedBank.subscribe = function() { 
    alert("Hi"); 
    $.ajax({ 
     url: '@Url.Action("GetBankLocations_Data")', 
     data: { Bankname: SelectedBank() }, 
     type: 'GET', 
     success: function (data) { 
      self.BankLocation(data); 
     } 
    }); 
    $.getJSON('@Url.Action("GetBankLocations_Data")', SelectedBank, function (data) { 
     self.BankLocation(data); 
    }) 
+0

感謝您的迴應。這裏的情況是我的屏幕類似於購物卡屏幕(請參閱:http://knockoutjs.com/examples/cartEditor.html)。所以我只需要使用self,因爲在同一個屏幕中會有多個具有相同名稱但不同框架的控件。 – 2015-03-25 12:10:58

+0

斯龐德是正確的需要使用自己。 @MVCDeveloper'self.SelectedBank.subscribe = function(selectedValue){//在ajax數據中:{Bankname:selectedValue}}'。歡呼 – 2015-03-25 12:18:10

+0

謝謝你幫助我。我的問題是.subscribe甚至沒有解僱。請讓我知道是否缺少任何參考。 ,這些是我保留的參考資料。這是參考問題還是別的。請告訴我。 – 2015-03-25 12:27:21

相關問題