2013-02-21 96 views
0

我有填充knockout.js 2名下拉列表,我有2个问题:ASP.NET MVC 4 KNOCKOUT.JS

1)为什么这个人是从Model.StreetList

@Html.DropDownListFor(m => m.SelectedStreet, Model.StreetList, new {onchange = "FetchHouses();"}) 
填充

但这并不

@Html.DropDownListFor(m => m.SelectedStreet, Model.StreetList, new {onchange = "FetchHouses();", @data_bind = "options: StreetList, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Select...'"}) 

那么,这可以通过从型号默认填充它,但如果某些事件发生与基因敲除结合填充它?

2)表单提交后,如果ModelState无效,那些2个列表中的选定值将丢失。我该如何解决这个问题?

<p> 
    @Html.LabelFor(m => m.SelectedStreet, @Resources.RegistrationStreet) 
    @Html.DropDownListFor(m => m.SelectedStreet, Model.StreetList, new {onchange = "FetchHouses();", @data_bind = "options: StreetList, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Select...'"}) 
</p> 
<p> 
    @Html.LabelFor(m => m.SelectedHouse, @Resources.RegistrationHouse) 
    @Html.DropDownListFor(m => m.SelectedHouse, Model.HouseList, new { @data_bind="options: HouseList, optionsText: 'Number', optionsValue: 'Id'"}) 
</p> 

任何帮助表示赞赏!

编辑:

knockout.js上改变事件发生的结合,它工作正常,问题是,虽然改变事件不解雇我想从MVC模型 填充下拉菜单下面是JS代码做结合:

function CascadingDdLViewModelStreet() { 
    this.StreetList = ko.observableArray([]); 
    this.HouseList = ko.observableArray([]); 
} 

var objVMStreet = new CascadingDdLViewModelStreet(); 
ko.applyBindings(objVMStreet); 

function FetchStreets() { 
    objVMStreet.HouseList([]); 
    objVMStreet.StreetList([]); 
    var cityCode = $("#SelectedCity").val(); 
    $.getJSON("/Account/GetStreets/" + cityCode, null, function(data) { 
     objVMStreet.StreetList(data); 
    }); 

} 

function FetchHouses() { 
    var streetCode = $("#SelectedStreet").val(); 
    $.getJSON("/Account/GetHouses/" + streetCode, null, function(data) { 
     objVMStreet.HouseList(data); 
    }); 
} 

这里是一个全码:

查看:http://pastebin.com/jva9ff8A

莫德尔:http://pastebin.com/vDQkg0d5

控制器:http://pastebin.com/avBuRy9D

+0

看起来你正在做级联下拉,这正是我目前的工作。我使用这个例子:http://marcofranssen.azurewebsites.net/knockout-that-c​​ascading-dropdown/和http://knockoutmvc.com非常有用! – Tsar 2013-02-21 10:59:53

回答

1

1.try填充KO模型与MVC模型数据,像这样:

function CascadingDdLViewModelStreet() { 
    this.StreetList = ko.observableArray(@Html.Raw(Json.Encode(Model.StreetList))); 
    this.HouseList = ko.observableArray([]); 
} 

2.You需要传递模型(即使无效)与SelectedStreet & SelectedHouse填充回视图。

+0

1)请参阅问题2)中的编辑我做了,在问题中添加了完整的代码。谢谢 – 2013-02-21 10:42:54

+0

对不起,pastebin被阻止了。请参阅q1上的编辑 – Tsar 2013-02-21 10:57:23

+0

如果Model.StreetList是ICollection,它会起作用,谢谢 – 2013-02-22 09:08:34