将FormData从Angular传递到.net MVC控制器
Pass FormData from Angular to .NET MVC Controller
My View:
<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>
My Angular Controller:
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时,我遇到了很多问题。
当我使用$http对象发送$scope时。. net不能识别这些数据,因为它没有被格式化为预期的form-data。
当我使用FormData JS对象时,我得到服务器错误:"无效的JSON原语:------WebKitFormBoundaryzFvk65uKpr0Z7LG1。"
如果我将FormData对象字符串化,我们又回到了第一个问题。
许多其他来源/问题表明,只是传递FormData对象到ajax请求应该工作-没有关于为什么从2错误的信息。发生。
有人知道为什么会这样吗?
没有人想出解决办法,但幸运的是我做到了。您需要使用jquery $。方法,它接受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');
});
感谢这篇文章,它帮助澄清了一些问题。
相关文章:
- 将Javascript数组发送到控制器ASP.NET MVC
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- ASP.NET MVC,在文本框旁边显示文本
- Angular promise return"未定义的“;值.NET MVC
- asp.net MVC,重定向到视图,视图打开新窗口到外部url,它'It’’’’我们被当成一种风景
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 使用jquery变量作为.net MVC中ActionLink的参数
- 带有接口的ASP.NET MVC RegisterModel
- OnClick对ActionLink-ASP.NET MVC中的Prevent无效
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 如何在asp.net mvc 3上进行触摸屏操作
- asp.net mvc中的javascript验证不适用于登录表单
- ASP.NET MVC-如何捕获多个复杂的ListBox值并将其保存到数据库中
- ASP.NET MVC路由-动态加载.js脚本
- 如何在asp.net MVC中从View获取值到JavaScript
- 在带有 bootbox 的自定义对话框中添加选项以选择表单控件.js在 ASP.NET MVC 中
- 谷歌将部分页面加载后自动完成不起作用 ASP.Net MVC
- ASP.Net MVC 脚本无法使用控制器的默认操作 URL.使用控制器/操作 URL 也是如此