我正在使用 Angularjs(1.2.20)向 Microsoft ASP.Net MVC 4 提交表单帖子:
public ActionResult Save2(FormCollection customer)
{
//TODO: Do some stuffs...
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
但是,FormCollection
为空。我知道数据正在发送,因为如果我将其更改为下面的代码(使用强类型CustomerVm
),它将按预期工作。
public ActionResult Save1(CustomerVm customer)
{
//TODO: Do some stuffs...
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
我正在使用FormCollection
,因此我可以在数据中添加 ASP.Net 防伪标记(而不是标头)。以下是我的自定义JavaScript代码。您还可以找到整个代码( Visual Studio )here
答案 0 :(得分:1)
您需要发送内容类型为application/x-www-form-urlencoded
的请求,并对请求正文进行编码。这是一个好的开始,但它将数据作为JSON发送。
var data = JSON.stringify(customer);
// FormCollection
$http({
method: 'POST',
url: '/Home/Save2',
//dataType: 'json',
contentType: 'application/x-www-form-urlencoded; charset-UTF-8',
//contentType: 'application/json; charset-UTF-8',
data: data
});
将对象转换为URL编码形式实际上非常复杂。值得庆幸的是,Ben Nadel已经通过请求转换器创建了transformRequestAsFormPost service to do this。您可以尝试添加他的代码并对您进行更改...
myApp.factory('customerSvc', function ($http, transformRequestAsFormPost) {
return {
// ...
save2: function (customer, antiForgeryToken) {
$http({
method: 'POST',
url: '/Home/Save2',
transformRequest: transformRequestAsFormPost,
data: data
});
}
};
});