Asp.net mvc 淘汰/选择2:图书转移应用程序的下拉列表无法正常工作

Asp.net mvc 淘汰/选择2:图书转移应用程序的下拉列表无法正常工作,asp.net-mvc,knockout.js,jquery-select2,Asp.net Mvc,Knockout.js,Jquery Select2,因此,我在尝试完成的应用程序中遇到了问题。它应该会发送一份我想要的书籍更改清单。现在我在knockout中有两个viewmodels,其中包含通过json传入的数据 我一直在尝试用正确的列表填充下拉列表,并跟踪发生的更改,但我没有任何运气。这是我一直试图用来将列表附加到下拉列表的绑定。我可以填充它们,但无法选择任何内容 函数BookPossessionTransferVM(){ var self=这个; self.AllFromList=([ {“IsAdult”:false,“Name”:“

因此,我在尝试完成的应用程序中遇到了问题。它应该会发送一份我想要的书籍更改清单。现在我在knockout中有两个viewmodels,其中包含通过json传入的数据

我一直在尝试用正确的列表填充下拉列表,并跟踪发生的更改,但我没有任何运气。这是我一直试图用来将列表附加到下拉列表的绑定。我可以填充它们,但无法选择任何内容

函数BookPossessionTransferVM(){
var self=这个;
self.AllFromList=([
{“IsAdult”:false,“Name”:“Bob”,“ID”:38438},
{“IsAdult”:false,“Name”:“Gordon”,“ID”:54686}
]);
self.positionchanges=ko.observearray([]);
self.positionChanges.push(新的positionChangeModel());
self.AvailableFrom=ko.computed(函数(){
var possessionChangesValues=self.PossessionChanges(),
available=ko.utils.arrayFilter(self.AllFromList,函数(selectedPerson)){
return!ko.utils.arrayFirst(positionChanges值,函数(positionChange){
if(possessionChange.SelectedFrom()!==未定义){
return positionchange!=self&&
positionChange.SelectedFrom().Name()==selectedPerson.Name;
}否则{
返回false;
}});
});
返回可用;
});
self.AvailableTo=ko.computed(函数(){
var possessionChangesValues=self.PossessionChanges(),
available=ko.utils.arrayFilter(self.AllToList,函数(selectedPerson){
return!ko.utils.arrayFirst(positionChanges值,函数(positionChange){
if(possessionChange.SelectedFrom()!==未定义){
return positionchange!=self&&
positionChange.SelectedFrom().Name()==selectedPerson.Name;
}否则{
返回false;
}});
});
返回可用;
});
self.addPossessionChange=函数(){
self.positionChanges.push(新的positionChangeModel());
}
self.removePosessionChange=函数(PosessionChange){
self.positionchanges.remove(positionchange);
}
}
函数positionChangeModel(){
var self=这个;
self.SelectedFrom=ko.observable(新SelectedPerson());
self.SelectedTo=ko.observable(新SelectedPerson());
self.ChangeType=ko.pureComputed(函数(){
if(self.SelectedFrom()!==未定义和self.SelectedTo()!==未定义){
返回“更新”;
}else if(self.SelectedFrom()==未定义和self.SelectedTo()==未定义){
返回“”;
}else if(self.SelectedFrom()==未定义){
返回“添加”;
}else if(self.SelectedTo()==未定义){
返回“删除”;
}else{返回“”;}
});
}
函数SelectedPerson(){
var self=这个;
self.IsAdult=ko.可观察(假);
self.Name=ko.observable(“无”);
self.ID=ko.可观察(0);
}
ko.bindingHandlers.select2={
init:function(元素、valueAccessor、allBindingsAccessor、bindingContext){
ko.utils.domNodeDisposal.addDisposeCallback(元素,
函数(){
$(元素)。选择2('destroy');
});
var select2=ko.utils.unwrapObservable(allBindingsAccessor().options);
$(元素)。选择2(选择2);
},
更新:函数(元素、valueAccessor、allBindingsAccessor、bindingContext){
var allBindings=allBindingsAccessor();
if(所有绑定中的“值”){
if((allBindings.select2.multiple | | element.multiple)&&allBindings.value().constructor!=Array){
$(element).val(allBindings.value().split(',).trigger('change');
}否则{
$(元素).on('select2:selecting',函数(e){
var data=e.params.args.data.id;
控制台日志(数据);
});
$(element).val(allBindings.value()).trigger('change');
}
}
$(元素)。触发器(“更改”);
}
};
ko.applyBindings(new BookOccessionTransferVM())
#TBLPossionChanges{
宽度:70%;
高度:100px;
文本对齐:居中;
表布局:固定;
}
#TBLReasignchanges td、#TBLPossitions changes th{
填充:1rem;
}
#TBL更改了日期{
文本对齐:居中;
}
#TBL更改日期:第一个孩子{
文本对齐:左对齐;
宽度:10%;
}
#TBLReasignChanges tbody td:第一个孩子{
文本对齐:左对齐;
宽度:10%;
}
#TBLReasignchanges>tbody>tr>td.prompt>a{
字体大小:粗体;
}
#TBLReasignChanges t车身温度选择{
宽度:75%
}

从…起
到

您在这里遇到了多个问题:

  • 主要问题是,您假设
    positionChange.SelectedFrom()
    包含整个person对象,而实际上它只包含其id,因为这是传递给
    optionValue
    的内容。请你完全理解它。您必须通过其id检索此人
  • AvailableTo
    指的是
    positionchange.SelectedFrom()
    而不是
    positionchange.SelectedTo()
  • 名称冲突:
    removepositionchange
    vs
    removepositionchange
  • possionchange
    必须具有id才能删除 还有其他一些问题

    我想我解决了大部分问题。还要注意,我使用的是
    PersonVM
    而不是普通对象:

    函数BookPossessionTransferVM(){