2014-09-23 90 views
0

我有一個數據綁定下拉列表;敲除數據綁定問題

<asp:DropDownList ID="cmbType" Runat="server" AutoPostBack="False" data-bind="value: moveType"> 
    <asp:ListItem Value="">-- Please Select --</asp:ListItem> 
    <asp:ListItem Value="0">Car</asp:ListItem> 
    <asp:ListItem Value="1">Air</asp:ListItem> 
</asp:DropDownList> 

還我

var viewModel = { 
    this.moveType = ko.observable(MoveType); 

}; 
ko.applyBindings(new ViewModel());​ 

其中 「MoveType」 爲0或1。這似乎是工作的罰款,但只是部分。 如果MoveType = 1,一切都很好,並且從下拉列表中選擇的值是正確選擇的。如果MoveType = 0,則不想選擇「Car」,而是選擇選項爲「 - 請選擇 - 」價值「」。

問題很簡單,爲什麼?我錯過了什麼?我無法理解它。

+0

咦?如果用戶在某個點選擇「Car」,你認爲'MoveType'可觀察值是什麼? – Jeroen 2014-09-23 07:12:19

+1

你能更清楚地解釋這個嗎?要麼是無法理解,要麼這似乎是模棱兩可的。 – 2014-09-23 07:23:34

+0

創建一個新的[fiddle](http://jsfiddle.net/) – Fabio 2014-09-23 07:25:09

回答

0

您確定您沒有在控制檯中收到任何錯誤?

我改變你的代碼:

var MoveType=1; 
var ViewModel = function() { 
    this.moveType = ko.observable(MoveType);  
};  
ko.applyBindings(new ViewModel()); // This makes Knockout get to work 

,現在它似乎工作: 你可以測試它Here

+0

是的,我確定。但是,謝謝你的例子。我在我的問題中修復了applyBindings。沒有發現我放置ViewModel沒有「新」的問題。 – 2014-09-23 07:40:20

0

「車」在您的下拉列表中的0值(看你的Value屬性)。這就是爲什麼0導致選擇「汽車」的原因。如果您想選擇「 - 請選擇 - 」,您需要將該值設置爲空字符串""

這反過來意味着您的javascript moveType因此也是您的C​​#MoveType必須是字符串而不是數字,因爲「」不是有效數字。

爲了防止我建議你用不同的數字編號:使用Value="1"代替汽車,Value="2"代替空氣。然後你的「請選擇」選項獲得Value="0"

+0

謝謝你的回答,但是,你看過一個問題嗎?問題在於選擇了值「」而不是「0」(MoveType爲0時)。 – 2014-09-23 09:09:20

+0

@Olegs - 我的確看過這個問題,但還不夠清楚。但是你看過我的回答嗎?我的意思是,第2和第3段? – chiccodoro 2014-09-23 13:51:52