【问题标题】:Pass FormData from Angular to .NET MVC Controller将 FormData 从 Angular 传递到 .NET MVC 控制器
【发布时间】:2016-09-23 03:52:03
【问题描述】:

我的观点:

<form ng-submit="onFormSubmit()">
    <div class="form-group">
        <label for="Movie_Genre">Genre</label>
        @Html.DropDownListFor(m => m.Movie.GenreId, new SelectList(Model.Genres, "Id", "Name"), "Select Genre", new { @class = "form-control", ng_model = "formData.Movie.GenreId" })
        @Html.ValidationMessageFor(m => m.Movie.GenreId, "The Genre field is required.")
    </div>
    <div class="form-group">
        <label for="Movie_Stock">Number in Stock</label>
        @Html.TextBoxFor(m => m.Movie.Stock, new { @class = "form-control", ng_model = "formData.Movie.Stock" })
        @Html.ValidationMessageFor(m => m.Movie.Stock)
    </div>

    @Html.HiddenFor(m => m.Movie.Id, new { ng_model = "formData.Movie.Id" })
    @Html.AntiForgeryToken()
    <button type="submit" class="btn btn-primary">Save</button>
</form>

我的 Angular 控制器:

var MoviesAdminEditController = function ($scope, $state, $http) {
    $scope.formData = {};

    $scope.onFormSubmit = function () {
        // $scope.formData.__RequestVerificationToken = angular.element('input[name="__RequestVerificationToken"]').attr('value');

        var formData = new FormData(angular.element('form'));
        formData.append('__RequestVerificationToken', angular.element('input[name="__RequestVerificationToken"]').attr('value'));

        $http({
            method: 'POST',
            url: '../../Movies/Save',
            data: formData,
            headers: {
                'enctype': 'multipart/form-data'
            }
        }).then(function successCallback(response) {
            alert('worked');
            $state.go('moviesAdmin');
        }, function errorCallback(response) {
            alert('failed');
            $state.go('moviesAdmin');
        });
    }
}

所以我在尝试使用 Angular 从前端将数据发送到后端 .Net 控制器中的 ActionResult 时遇到了很多问题。

  1. 当我使用 $http 对象发送 $scope.formData(自动加载)时,.Net 无法识别数据,因为它没有被格式化为预期的表单数据。

  2. 当我使用 FormData JS 对象时,我收到服务器错误:“无效的 JSON 原语:------WebKitFormBoundaryzFvk65uKpr0Z7LG1。”

  3. 如果我对 FormData 对象进行字符串化,我们又回到了第一个问题。

许多其他来源/问题表明,仅将 FormData 对象传递给 ajax 请求应该可以工作 - 没有关于为什么 2. 发生错误的信息。

有人知道为什么会这样吗?

【问题讨论】:

    标签: javascript angularjs json ajax asp.net-mvc-4


    【解决方案1】:

    没有人想出解决方案,但幸运的是我做到了。您需要使用 jquery $.ajax 方法,该方法接受 Angular 的 $http 不接受的可选参数。最终代码如下所示:

    var formData = new FormData(angular.element('#new-movie-form')[0]);
    
    $.ajax({
        type: 'POST',
        data: formData,
        url: '../../Movies/Save',
        processData: false,
        contentType: false,
        cache: false,
        dataType: 'json'
    })
    .done(function () {
        alert('success');
        $state.go('moviesAdmin');
    })
    .fail(function () {
        alert('failed');
        $state.go('moviesAdmin');
    });
    

    感谢 this article 帮助解决了一些问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多