gpt4 book ai didi

javascript - AJAX Post 从未进入 ASP.Net Controller

转载 作者:行者123 更新时间:2023-12-03 04:52:40 24 4
gpt4 key购买 nike

我知道这个调用有效,因为调试时我可以在 xhr header 中看到它。然而,数据似乎从未到达 Controller ,我不明白为什么。我的 ASP.Net 技能非常有限,因此我将发布我所做的一切。

JS:

var data = JSON.stringify(myObj)
$.ajax({
url: '/Things/UploadInfo',
type: 'POST',
data: data,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
crossDomain: true,
cache: false,
processData: false,
success: function (data) {
console.log('success')
},
error: function() {
console.log('error')
}
});

<强> ThingsController.cs

字符串数据不断返回null

[System.Web.Http.HttpPost]
public JsonResult UploadInfo(string data)
{
InfoModel someInfo = new InfoModel();

return Json(new { status = "success" });
}

InfoModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ProjectName.Models
{
public class InfoModel
{
public class Attr
{
public string name { get; set; }
public string age { get; set; }
public string sex { get; set; }
}
}
}

最佳答案

我将从简化您的 ajax 调用开始。您使用的设置是 WebForms 所必需的,但 MVC 和 WebApi 框架不需要这些额外的选项(crossDomain 除外,但看起来您实际上并没有这样做任何与 CORS 相关的内容)。

这是我会使用的:

$.post('/Things/UploadInfo', myObj)
.done(function (response, status, jqxhr) {
console.log('success')
})
.fail(function(jqxhr, status, error) {
console.log('error')
});

这假设 myObj 是 JSON 对象或者可以隐式序列化。

您的 UploadInfo 操作可能应该有一个要绑定(bind)的模型,或者您期望的各个参数。假设您有这个模型:

public class Foo
{
public int ID { get; set; }
public string Name { get; set; }
}

那么你的操作会是这样的

public ActionResult UploadInfo(Foo model)

public ActionResult UploadInfo(int id, string name)

并且两者都将由模型绑定(bind)器映射。作为旁注,您可以保留返回类型(大部分)通用 - JsonResult 继承 ActionResult,因此您仍然可以使用 return Json()当返回类型为 ActionResult 时。

如果您期望不同的 JSON 对象,那么您提供给 ajax 调用的数据对象将类似于:

var data = {
data: myObj
};

关于javascript - AJAX Post 从未进入 ASP.Net Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com