2016-04-06 3 views
1

Ich benutze MVC mit KnockoutJs und vor einem Problem mit einer value Bindung.Problem mit Einstellungswert für Dropdown-Liste von Modell

@Html.DropDownListFor(m => m.PrimarySubspecialty, Model.PrimarySubspecialties, new { id = "ddUserDetailsPrimarySubSpeciality", style = "width:245px;height:25px;", @class = "nmc-select", data_bind = "options: primarySubSpecialities,optionsText: 'Name',optionsValue: 'Id',value:PrimarySubspecialty" }) 

Ich bin nicht sicher, warum der PrimarySubspecialty Wert im Modell der Dropdown ausgewählten Wert nicht gebunden zu werden.

Hier ist mein js Code:

this.PrimarySubspecialty = Ko.observable($('#ddUserDetailsPrimarySubSpeciality').val()); 
this.primarySubSpecialities = ko.observableArray([]); 

function loadPrimarySubSpecilaities() { 
    $.ajax({ 
     type: 'GET', 
     url: primarySubSpecialityUrl, 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     processdata: false, 
     cache: false, 
     success: function (data) { 

      primarySubSpecialities = []; 

      try { 
       if (data.length == 0) { 

        primarySubSpeacilityDropdownId.empty(); 

       } 
       model.primarySubSpecialities(data); 
      } 
    }); 
} 

Bitte lassen Sie mich wissen, wie ich den Wert auf PrimarySubSpeciality Dropdown festlegen.

Antwort

0

Wenn Sie asynchrone Methoden zum Füllen von Dropdown- oder Auswahllisten verwenden, müssen Sie darauf achten, dass der ausgewählte Wert nicht gebunden wird, bevor die Liste ausgefüllt wurde.

Wenn Sie eine Liste ändern, behält Knockout nur den gebundenen Wert bei, wenn er in der Liste vorhanden ist. Ist dies nicht der Fall, wird der Wert undefined festgelegt.

Code zu korrigieren, um den Wert in einer Variablen speichern und setzen nur die beobachtbaren nach die Liste gefüllt ist:

var holdingValue = $('#ddUserDetailsPrimarySubSpeciality').val(); 
this.PrimarySubspecialty = Ko.observable(); 

den Wert gesetzt Dann, sobald die Liste gefüllt ist:

model.primarySubSpecialities(data); 
model.PrimarySubspecialty(holdingValue); 

Ich habe eine schnelle JSFiddle-Testseite gemacht, um dies zu demonstrieren: https://jsfiddle.net/Quango/0bxaqLf8/

Verwandte Themen