我在ASP.Net Core中有一個控制器操作,它返回一個BadRequest
以及某些模型狀態。我想在我的Angular promise錯誤處理程序中將驗證消息平鋪到單個數組中。我不知道如何去做。從錯誤響應中獲取Java腳本中的狀態數據
這就是我在Web API控制器操作中返回BadRequest
的方式。
return base.BadRequest(base.ModelState);
然後在我的Angular控制器中,我現在有一個這樣的錯誤處理程序。
(function() {
angular.module('app')
.controller('AccountCreationController', AccountCreationController);
function AccountCreationController(AccountCreationService) {
var viewModel = this;
viewModel.accountSetup = AccountCreationService.getAccountTypes();
viewModel.create = create;
viewModel.errors = new Array();
function create(user) {
var result = AccountCreationService.createAccount(user).$promise.then(function (response) {
var x = response;
},
function (error) {
// iterate over each key in the key/value pair.
for (var key in error.data) {
// iterate over each element in the data[key] array of validation messages
for (var e in error.data[key]) {
errors.push(e);
}
}
});
}
}
})();
error
的對象具有屬性data
在其上,包含該模型狀態陣列。該模型是這樣的:
我可以通過鍵入error.data["1"]
到Chrome的控制檯可以訪問驗證消息的數組,我可以在截圖與error.data["1"][0]
顯示的消息。但是,當我嘗試迭代data屬性以將錯誤提取到展平數組中時,該數組爲空。我不確定我在這裏做了什麼錯誤(JS的新功能) - 我遍歷了data
屬性中的每個鍵,然後遍歷數組中爲該鍵保存的每個值。
爲了獲得底層的消息數組,我該怎麼做?
編輯
如果我運行在Chrome的控制檯循環,我得到下面的輸出
var errors = new Array();
for (var key in error.data) {
for (var e in error.data[key]) {
console.log(key + ":" + e[0]);
}
}
1:0
[避免](http://stackoverflow.com/a/3010848/758991)迭代數組的'for..in'。你也不能在這裏迭代。只需使用'errors = errors.concat(error.data [key])' – djxak
有一個類似的問題給你在這裏http:// stackoverflow。com/questions/33545909/displays-invalid-modelstate-in-web-api-via-jquery-ajax唯一的區別是我正在使用knockout而不是角度 –
@djxak像'for(var key in error.data){viewModel。 errors.concat(error.data [key])}'?這不會產生任何值的數組。我做錯了嗎? –