使用 angular.js 按自动编号字段删除记录

Posted

技术标签:

【中文标题】使用 angular.js 按自动编号字段删除记录【英文标题】:Delete the record by AutoNumber field with angular.js 【发布时间】:2014-07-23 02:40:00 【问题描述】:

如何使用 angular.js 删除自动编号字段的记录?

场景:

默认页面是:

当我将记录推送到 $scope.users 时:

$scope.user=
   Name:***,
   Family:***.com,
   ID:undefined

然后会显示记录:

当我想删除记录时,出现如下错误:

他的参数字典包含参数“id”的空条目 方法“Void DeleteUser(Int32)”的不可空类型“System.Int32” 在“Angular_02.Controllers.UserController”中。可选参数必须 是引用类型、可为空的类型或被声明为可选项 范围。参数名称:参数

因为 ID 字段未定义

将用户代码删除到服务器中:

[HttpPost]
public void DeleteUser(int id)

  var userService=new UserService();
  userService.Delete(id);

如何解决此错误? 我已经搜索了很长时间,但没有找到任何帮助。我哪里错了?我真的不知道该怎么办。我在下面写了所有细节。我试过了,没有成功。

app.js 文件:

var app = angular.module('myApp', ['ngAnimate']);
app.controller("UserController", function ($scope, $http) 

    $scope.users = "";
    $scope.user = "";

    // Get User Scope
    var getUsersRequest = $http(
        method: "get",
        url: "/User/GetUsers",
    );

    getUsersRequest.success(
        function (data) 
            $scope.users = data;
        
    );
    // End Get User Scope


    // Add User Scope

    $scope.addUser = function (user) 

        var addUserRequest = $http(
            method: "post",
            url: "/User/AddUser",
            data: user
        );

        addUserRequest.success(
            function () 
                $scope.users.push(user);
                $scope.user = "";
            
        );
    ;
    // End Add User Scope

    // Delete User Scope
    $scope.deleteUser = function (id, index) 
        var addUserRequest = $http(
            method: "post",
            url: "/User/DeleteUser",
            data:  "id": id 
        );

        addUserRequest.success(
            function () 
                $scope.users.splice(index, 1);
            
        );
    ;
    // End Delete User Scope
);

html代码:

<div ng-controller="UserController" ng-app="myApp">
    <span>Count :  users.length User</span>
    <div ng-repeat="user in users">
        <span>Name : user.Name</span>
        <span>Family : user.Family</span>
        <section style="float: left;" ng-click="deleteUser(user.ID,$index);">
            <a href="javascript:void(0)">Delete</a>
        </section>
    </div>

    <form name="userForm" ng-submit="addUser(user)">
        <input class="form-control" ng-model="user.Name" placeholder="Name" />
        <input class="form-control" ng-model="user.Family" placeholder="Family" />
        <button type="submit" class="btn btn-primary">Add User</button>
    </form>
</div>

我的表格脚本:

CREATE TABLE [dbo].[Users](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](max) NOT NULL,
    [Family] [nvarchar](max) NOT NULL,
 CONSTRAINT [PK_dbo.Users] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

更新:

在服务中添加用户:

private UserContext _userContext;
        public void Add(User user)
        
            using (_userContext = new UserContext())
            
                _userContext.Users.Add(user);
                _userContext.SaveChanges();
            
        

【问题讨论】:

【参考方案1】:

我不确定您的操作如何看待添加新用户,但可能类似于:

[HttpPost]
public User AddUser(User user)

  var userService=new UserService();
  userService.AddUser(user);
  userService.Comit();
// make sure that you return created user
return user

然后在你的 js 部分中

 $scope.addUser = function (user) 

         $http.post("/User/AddUser",user).then(function(response)
               $scope.users.push(response.data);
                $scope.user = ;

        );               

    ;
// End Add User Scope

如果这不起作用,请从服务器端发布您的 addUser 操作。

【讨论】:

【参考方案2】:

您没有显示“添加用户”网络服务。来自添加用户 Web 服务的响应应该返回数据库中存在的用户(或至少是用户 ID)。通过向客户端发送新 ID,您现在有足够的信息来删除用户。

【讨论】:

以上是关于使用 angular.js 按自动编号字段删除记录的主要内容,如果未能解决你的问题,请参考以下文章

删除查询后更新自动编号字段

重置数据库中的自动编号(身份字段)

如何让access自动编号从1开始排序实现方法

自动编号字段有重复项

如何按顺序获取下一个可用号码? [复制]

如何为mysql中的数据记录添加一个唯一的编号,在查询的时候可以根据这个编号对这条记录进行操作。