淘汰数据绑定问题

时间:2014-09-23 07:01:28

标签: c# javascript knockout.js

我有一个带有data-bind的下拉列表;

<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());​

其中&#34; MoveType&#34;是0或1.这似乎工作正常,但只是部分。 一切都很好,只有当&#34; MoveType&#34;时才能正确选择下拉值。 = 1.如果MoveType = 0,它不想选择&#34; Car&#34;而选择的选项将是&#34; - 请选择 - &#34;有价值&#34;&#34;。

问题很简单,为什么?我错过了什么?我无法理解。

2 个答案:

答案 0 :(得分:0)

您确定在控制台中没有收到任何错误吗?

我将您的代码更改为:

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

现在它似乎工作: 你可以测试它Here

答案 1 :(得分:0)

“car”在您的下拉列表中的值为0(查看您的Value属性)。这就是0导致“汽车”被选中的原因。如果要选择“ - 请选择 - ”,则需要将值设置为空字符串""

这反过来暗示您的javascript moveType以及您的C#MoveType必须是字符串而不是数字,因为“”不是有效数字。

为了防止这种情况,我建议您以不同方式为您的选项编号:使用Value="1"代表汽车,Value="2"代表航空。然后,您的“请选择”选项会获得Value="0"