尝试在angularjs中实现删除功能。 asp.net中的后端工作正常。当我检查邮递员工作正常。现在我正在尝试前端。当我点击删除按钮。它没有得到UId。它的表现就像这样。
http://localhost:50802/api/User/BUser/[object%20Object]
对于角度来说,我是全新的。我不知道这个角度代码是否正确。另一件事是我还需要实现用户确认弹出窗口。请帮帮我......
角度控制器。
$scope.DeleteUser = function (data, UId) {
$http({
method: "post",
url: urls.api + 'User/BUser/' + UId,
data: JSON.stringify(data)
}).then(function (response) {
alert(response.data);
})
};
HTML
<tr ng-repeat="d in UserList">
<td>{{d.description}}</td>
<td>{{d.path}}</td>
<td><button ng-click="DeleteUser()">Delete </button></td>
</tr>
这里是我的Asp.net控制器
[HttpDelete]
[Route("DeleteBanner/{UId}")]
public async Task<IHttpActionResult> DeleteBanner(int UId)
{
int? result = await _service.DeleteBannerAsync(UId);
return Ok();
}
答案 0 :(得分:2)
您在控制器内的功能需要参数Id和数据,我假设您的数据引用了对象 var array = {"nR": 22, "nH": 7, "totB": "2761", "nSR": 16, "htRb": "91981"}
var parskey = 0;
for (var key in array) {
parskey = parseInt(array[key]);
sum += parskey;
};
return(sum);
,更改html如下,
user
然后,
<td><button ng-click="DeleteUser(d)">Delete </button></td>
答案 1 :(得分:2)
要遵循许多模式。但是,让我先回答你的问题,然后建议一个更好的模式: 您的ng-click事件没有采用任何参数,它应该如下所示:
<tr ng-repeat="d in UserList">
...
<td><button ng-click="DeleteUser(d.UId)">Delete </button></td>
</tr>
由于您的.NET API Controller需要一个名为 UId 的参数,如下所示,
[HttpPost]
[Route("BUser/{UId}")]
public async Task<IHttpActionResult> DeleteUser(int UId) {
//Implementation
}
然后在Angular中,您必须使用该标记名称标记该参数: params:{UId:id} 。此外,由于您要提示用户确认操作,我建议您使用Bootbox Js,如下所示: 它是一个小巧,功能强大,易于使用的JavaScript库。只需在索引文件中提供指向它的链接。
$scope.DeleteUser = function (id) {
var url = urls.api + 'User/BUser/' + id;
bootbox.confirm("Are you sure you want to delete this user?", function (result) {
if (result) {
$http.post(url, { params: { UId: id } })
.then(function (response) {
alert(response.data);
});
}
});
}
更好的模式:我建议控制器服务模式如下: 服务如下所示:
function deleteUser(id) {
var url = urls.api + 'User/BUser/' + id;
var deferred = $q.defer();
$http.post(url, { params: { UId: id } })
.then(success).catch(deferred.reject);
return deferred.promise;
function success(response) {
var data = response && response.data;
deferred.resolve(data);
}
}
然后在控制器:
$scope.DeleteUser = function (id) {
bootbox.confirm("Are you sure you want to delete this user?", function (result) {
if (result) {
/*
* You can use Angular blockUI to show progress here
*/
return userService.deleteUser(id).then(function (response) {
alert(response);
}).catch(function (error) {
alert(error);
}).finally(function () {
//You can stop the blockUI instance here.
//appBlockUI.stop();
});
}
});
}
这只是你在这条思路上进行研究的一个提示。
答案 2 :(得分:1)
试试这个,将tr
改为
<tr ng-repeat="d in UserList">
<td>{{d.description}}</td>
<td>{{d.path}}</td>
<td><button ng-click="DeleteUser(d, d.UId)">Delete </button></td>
</tr>
答案 3 :(得分:0)
感谢您的宝贵意见。我发现了错误。在asp.net控制器中,我使用 HttpDelete 。但是这里是在发布方法中的数据。那就是问题所在。
而且正如菲尔所说,我不需要考虑那些Json.stringify(data)
事。
这是答案。
角度控制器
$scope.DeleteUser = function (Uid) {
deleteUser = $window.confirm('Are you sure you want to delete?');
//console.log(Uid);
if (deleteUser) {
$http({
method: "Delete",
url: urls.api + 'User/BUser/' + Uid,
}).then(function (response) {
alert(response.data);
})
}
};
HTML
<button ng-click="DeleteUser(d.Uid)">Delete </button>
好吧,如果我浪费你的时间真的很抱歉。再次感谢