Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 所选内容在AngularJS MultiSelect绑定中不存在_Javascript_Angularjs_Asp.net Mvc - Fatal编程技术网

Javascript 所选内容在AngularJS MultiSelect绑定中不存在

Javascript 所选内容在AngularJS MultiSelect绑定中不存在,javascript,angularjs,asp.net-mvc,Javascript,Angularjs,Asp.net Mvc,我试图在视图中将多选中的选定值显示为单独的对象,这意味着选定值将出现在窗体的其他位置;实际的multiselect将被隐藏,只需发布选定的值,以便将其绑定到viewmodel服务器端(ASP.NET MVC) 这似乎是可行的。然而,AngularJS将在ID前面加上'string:'前缀,因此我必须使用track by。如果我这样做,multiselect开始表现出奇怪的行为,也就是说,如果我选择了一个选项,该选项将立即再次取消选择,除非我单击该选项两次。我不知道那里发生了什么事 下面是代码,有

我试图在视图中将多选中的选定值显示为单独的对象,这意味着选定值将出现在窗体的其他位置;实际的multiselect将被隐藏,只需发布选定的值,以便将其绑定到viewmodel服务器端(ASP.NET MVC)

这似乎是可行的。然而,AngularJS将在ID前面加上'string:'前缀,因此我必须使用
track by
。如果我这样做,multiselect开始表现出奇怪的行为,也就是说,如果我选择了一个选项,该选项将立即再次取消选择,除非我单击该选项两次。我不知道那里发生了什么事


下面是代码,有人知道我遗漏了什么吗?

似乎是ng options指令()的问题

我还在angularjs文档中找到了一些信息:

“在同一表达式中使用“选择为”和“跟踪方式”时要小心。”

我用叉子叉了你的扑克牌,用了一个带有ng repeat的
标签:


问题在于生成器模式
value.id as value.name
,尽管文档中声明了这一点,但它已经被破坏了一段时间

并将
select
标记更改为:-

<select id="tracking" multiple="multiple" ng-model="vm.selected" 
  ng-options="value.name for value in vm.values track by value.id">

如果您现在在浏览器中检查此元素,您将看到
选项
元素的
属性上没有不需要的“字符串:”前缀

为了让您放心,我还编写了一个函数,用于提取表单提交后将发送到服务器的值


但是,由于我的更改,
vm.selected
数组中的项不再是字符串ID,而是实际对象本身。因此,请记住在引用数组成员的代码中添加
.id
,例如
vm.selected[i].id
而不是
vm.selected[i]

两个同样有效的答案是一个艰难的选择,我选择了这个解决方案,因为它是入侵最小的,非常感谢!好的,这确实是一个角度错误。感谢您提供的背景信息和有效的解决方案。虽然我将采用第二个建议的解决方案,但我将采用您对plunkr所做的一些更改,所以我也投票支持这个答案。