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