【问题标题】:Posting NULL Data to asp.net core controller using angularjs使用 angularjs 将 NULL 数据发布到 asp.net 核心控制器
【发布时间】:2018-06-22 10:00:53
【问题描述】:

我正在将数据从 angularjs 发布到 .net 核心控制器,但我得到的是空值

学生控制器

[HttpPost]
        public JsonResult AddStudent(Student stu)
        {
            if (stu != null)
            {

                    db.Students.Add(stu);
                    db.SaveChanges();
                    return Json(stu);

            }
            else
            {
                return Json("Some Error Occured");
            }
        }

模块.js

var myApp = angular.module('myApp', []);

Service.js

myApp.service("myService", function ($http) {

    //get All Eployee



    // Add Employee
    this.AddEmp = function (Employee) {
        var response = $http({
            method: 'post',
            url: 'Employee/AddStudent/',
            data: JSON.stringify(Employee),
            dataType: 'json'

        });
        console.log(JSON.stringify(Employee));
        return response;
    }


});

Controller.js

myApp.controller("myCntrl", function ($scope, myService) {
    $scope.divEmployee = false;
    GetAllEmployee();
    //To Get All Records 
    function GetAllEmployee() {

        var getData = myService.getEmployees();

        getData.then(function (emp) {
            $scope.employees = emp.data;
        }, function () {
            alert('Error in getting records');
        });
    }



    $scope.AddUpdateEmployee = function () {

        var Employee = {
            Name: $scope.employeeName,
            Email: $scope.employeeAddress,
            Age: $scope.employeeEmail
        };
        console.log(Employee);
        var getAction = $scope.Action;

        if (getAction == "Update") {
            Employee.Id = $scope.employeeId;
            var getData = myService.updateEmp(Employee);
            getData.then(function (msg) {
                GetAllEmployee();

                $scope.divEmployee = false;
            }, function () {
                alert('Error in updating record');
            });
        } else {
            var getData = myService.AddEmp(Employee);
            getData.then(function (msg) {
                GetAllEmployee();
                alert(msg.data);
                $scope.divEmployee = false;
            }, function () {
                alert('Error in adding record');
            });
        }
    }

    $scope.AddEmployeeDiv = function () {
        ClearFields();
        $scope.Action = "Add";
        $scope.divEmployee = true;
    }

    //$scope.deleteEmployee = function (employee) {
    //    var getData = myService.DeleteEmp(employee.Id);
    //    getData.then(function (msg) {
    //        GetAllEmployee();
    //        alert('Employee Deleted');
    //    }, function () {
    //        alert('Error in Deleting Record');
    //    });
    //}

    function ClearFields() {
        $scope.employeeId = "";
        $scope.employeeName = "";
        $scope.employeeEmail = "";
        $scope.employeeAdress = "";
    }
});

索引.cshtml

<div ng-controller="myCntrl">

    <h1> Employee Details Page</h1>

    <br />

    <input type="button" class="btnAdd" value=" Add Employee" ng-click="AddEmployeeDiv()" />

    <div class="divList">
        <p class="divHead">Employee List</p>
        <table cellpadding="12" class="table table-bordered table-hover">
            <tr>
                <td><b>ID</b></td>
                <td><b>Name</b></td>
                <td><b>Email</b></td>
                <td><b>Age</b></td>
                <td><b>Actions</b></td>
            </tr>
            <tr ng-repeat="employee in employees">
                <td>
                    {{employee.id}}
                </td>
                <td>
                    {{employee.StudentName}}
                </td>
                <td>
                    {{employee.StudnetAddress}}
                </td>
                <td>
                    {{employee.StudentEmail}}
                </td>
                <td>
                    <span ng-click="editEmployee(employee)" class="btnAdd">Edit</span>
                    <span ng-click="deleteEmployee(employee)" class="btnRed">Delete</span>
                </td>
            </tr>
        </table>
    </div>

    <div ng-show="divEmployee">
        <p class="divHead">{{Action}} Employee</p>
        <table>
            <tr>
                <td><b>Id</b></td>
                <td>
                    <input type="text" disabled="disabled" ng-model="employeeId" />
                </td>
            </tr>
            <tr>
                <td><b>Name</b></td>
                <td>
                    <input type="text" ng-model="employeeName" />
                </td>
            </tr>
            <tr>
                <td><b>Email</b></td>
                <td>
                    <input type="text" ng-model="employeeAddress" />
                </td>
            </tr>
            <tr>
                <td><b>Age</b></td>
                <td>
                    <input type="text" ng-model="employeeEmail" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="button" class="btnAdd" value="Save" ng-click="AddUpdateEmployee()" />
                </td>
            </tr>
        </table>
    </div>
</div>
@*New record Modal addition..*@
@section scripts{

<script src="~/lib/angular/Module.js"></script>
<script src="~/lib/angular/Service.js"></script>
<script src="~/lib/angular/Controller.js"></script>

}

我只是想让你检查我的 POST 功能,我试图检查 console.log 以及它工作正常我正在获取数据但是当我检查 asp.net 核心时我没有获取数据。

【问题讨论】:

  • 在将其发布到服务之前,您是否在 Angular 服务中进行了调试,如果值存在?
  • 是的值存在,但只是没有传入 asp 代码
  • 将查看调试传入请求以查看是否尝试将传入 JSON 映射到 Student 对象(服务器端)。可以通过在点击按钮时查看 chrome 网络选项卡来确保网络数据看起来正确,单击帖子的新行,可以在右侧面板中看到数据的详细信息。

标签: .net angularjs asp.net-mvc


【解决方案1】:

您正在尝试从转发器传递值,您需要将其包装在现有对象Employees中,而不是将其作为单个值传递

【讨论】:

  • 你能详细点吗?
  • 任何人都可以帮我解决这个问题,我只是无法将数据发布到控制器
【解决方案2】:

您需要将 [FromBody] 添加到您的控制器,如下所示:

[HttpPost] public JsonResult AddStudent([FromBody] Student stu)  

以上是所谓的模型绑定示例。
模型绑定是 MVC 管道获取原始 HTTP 请求并将其转换为控制器上的操作方法调用的参数的过程。

您还需要在表单的输入字段中添加名称属性,如下所示:

name="employeeName"

name="employeeAddress"

name="employeeEmail"

控制器将读取名称属性并将输入绑定到模型中的相应属性。

【讨论】:

  • 我添加了属性仍然控制器保存空值
  • @WaqasRauf 您是否将 Student 的 [FromBody] 放入控制器中?
  • 不客气。我将编辑我的答案以包含问题的完整解决方案。
  • 我需要您的更多帮助,我该如何联系您?因为我改变了我所有的编码它和我在这里上传的不一样
  • 我将通过电子邮件将我的代码发送给您,并将我的问题发送给您
猜你喜欢
  • 2020-08-26
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多