我在ng-repeat
中附加了一个输入复选框,其中vm.addRemoveItem()
的函数ng-change
用于存储数组vm.itemsArr
中的所有已检查项。我希望能够通过webAPI将数组传递给c#方法,但数组不会传递给我使用的变量。请参阅以下代码中的正确说明
ng-repeat中的复选框
<input type="checkbox" ng-model="item.selected" ng-change="vm.addRemoveItem()" value={{item.id}} /> {{item.title}}
将所有已检查项目存储在数组中的函数
vm.addRemoveItem = function () {
vm.itemsArr = [];
angular.forEach(vm.itemList, function (item) {
if (item.selected) {
vm.itemsArr.push(item.id);
}
})
}
我确认上述功能正常,因为我能够使用alert()
显示已检查项目数组的内容。
通过webAPI(我的挑战)将值传递给c#
vm.itemObj= {
itemInfoId: $stateParams.id,
itemValues: JSON.stringify(vm.itemsArr)
};
这里的挑战是当我将上述对象itemObj
传递给通过webAPI调用的函数时,它返回验证错误,因为itemValues
为空但itemInfoId
具有正确的值。如何将数组内容传递到itemValues
?
C#功能
public async Task AddSubjectToClassInfoAsync(AddItemsInput input)
{
//Code to add values to database
}
//AddItemsInput Class
public class AddSubjectsInput
{
public int ItemInfoId { get; set; }
public string[] ItemValues { get; set; }
}
角度函数调用
vm.add = function () {
subjectService.addtoDBAsync(vm.itemObj).success(function () {
$modalInstance.close();
})
};
答案 0 :(得分:1)
当您将vm.itemObj的创建直接放在控制器内部时,一旦构建控制器就会创建它,这意味着vm.itemsArr尚未初始化或填充,因此您将获得空引用
将对象vm.itemObj的创建更改为;
vm.itemObj= {
itemInfoId: $stateParams.id,
itemValues: []
};
现在你可以直接将项目推送到vm.itemObj.itemValues,或者在需要时将itemValues替换为另一个数组,可能就在你要执行api调用时。
vm.itemObj.itemValues = vm.itemsArr;
答案 1 :(得分:0)
我认为您不需要将参数对象中的数组更改为
itemValues: JSON.stringify(vm.itemsArr)处的json字符串,您可以发送数组
vm.itemsArr并且http服务将使用< strong> vm.itemObj 对象