【问题标题】:jQuery post wont post data to ASP.NET API ControllerjQuery post 不会将数据发布到 ASP.NET API 控制器
【发布时间】:2025-12-23 09:20:12
【问题描述】:

我正在通过 jquery post 向 ASP.NET 控制器发送数据的噩梦。这是 JSON.stringify 后数据的样子:

[{"scheduleTaskID":"203","task":"Permit","baselineDate":"4/6/2005 8:00:00 AM","scheduledDate":"4/6/2005 8:00:00 AM","actualDate":"4/6/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"195","task":"Office Files","baselineDate":"7/13/2005 8:00:00 AM","scheduledDate":"7/13/2005 8:00:00 AM","actualDate":"7/13/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"196","task":"Foundation","baselineDate":"7/27/2005 8:00:00 AM","scheduledDate":"7/27/2005 8:00:00 AM","actualDate":"8/13/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"197","task":"Framing","baselineDate":"8/5/2005 8:00:00 AM","scheduledDate":"8/5/2005 8:00:00 AM","actualDate":"8/23/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"198","task":"Finishes Exterior","baselineDate":"8/26/2005 8:00:00 AM","scheduledDate":"8/26/2005 8:00:00 AM","actualDate":"9/14/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"199","task":"Drywall","baselineDate":"9/2/2005 8:00:00 AM","scheduledDate":"9/2/2005 8:00:00 AM","actualDate":"9/16/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"200","task":"Flooring","baselineDate":"9/1/2005 8:00:00 AM","scheduledDate":"9/1/2005 8:00:00 AM","actualDate":"9/20/2005 8:00:00 AM","finishedDate":"","selected":"on"},{"scheduleTaskID":"201","task":"General Finish","baselineDate":"9/12/2005 8:00:00 AM","scheduledDate":"9/12/2005 8:00:00 AM","actualDate":"","finishedDate":"","selected":"on"},{"scheduleTaskID":"202","task":"Final PDI","baselineDate":"10/11/2005 8:00:00 AM","scheduledDate":"10/11/2005 8:00:00 AM","actualDate":"","finishedDate":"","selected":"on"},{"scheduleTaskID":"203","task":"Permit","baselineDate":"4/6/2005 8:00:00 AM","scheduledDate":"4/6/2005 8:00:00 AM","actualDate":"4/6/2005 8:00:00 AM","finishedDate":"","selected":"on"},{}]

这就是我尝试传递该数据的方式:

$.post("/api/update/", JSON.stringify( array ), alert('success'), 'json');

这是我的 ASP.NET API 控制器:

[HttpPost]
        public dynamic Post(List<CellModel> cells)
        {
        }

这就是 CellModel:

public class CellModel
    {
        public string scheduleTaskID { get; set; }
        public string task { get; set; }
        public string baselineDate { get; set; }
        public string scheduledDate { get; set; }
        public string actualDate { get; set; }
        public string finishedDate { get; set; }
        public bool selected { get; set; }
    }

当我在public dynamic Post(List&lt;CellModel&gt; cells) 之后在控制器中放置一个断点时,它说单元格是cells Count = 0...我在我的帖子调用后放置return false; 以查看网络调用,它说状态代码是 301 永久移动:

这就是我获取这些数据的方式:

$("#form").submit(function (event) {
            var array = [];
            $('#form > table > tbody  > tr').each(function (elem) {
                var item = {
                    scheduleTaskID: $(this).find("td > #scheduleTaskID").val(),
                    task: $(this).find("td > #task").val(),
                    baselineDate: $(this).find("td > #baselineDate").val(),
                    scheduledDate: $(this).find("td > #scheduledDate").val(),
                    actualDate: $(this).find("td > #actualDate").val(),
                    finishedDate: $(this).find("td > #finishedDate").val(),
                    selected: $(this).find("td > #selected").val(),
                };
                array.push(item);
            });

            $.post("/api/update/", JSON.stringify(array), alert('success'), 'json');
            return false;

        });

【问题讨论】:

  • 根据发布的代码,您要发布的 URL 是 update,但端点是 Post。此外,您似乎有多个具有相同 ID 的元素。这在 HTML 中是一件坏事。
  • 是的,多个元素具有相同的 id,我需要以这种方式传递它
  • 我也不明白 Post 方法是如何被调用的。看起来数据应该发布到“更新”方法...
  • 它是一个 api 控制器,因此 url 应该看起来像 /api// 如果放入方法名称或取出它,我会得到相同的结果。控制器称为 UpdateController...只有更新应该在 url 中
  • >net web api 使用魔术词表示 crud 。如果方法以动词开头,那么它被认为是动词 public Task Post(Object object) is a Post

标签: javascript c# jquery asp.net asp.net-mvc


【解决方案1】:

POST将一个直接的 JSON 数组发送到 MVC 控制器不起作用。解决方案是使用长格式 AJAX jQuery 方法,包括 traditional:true 选项,并以不同的方式构建您的 JSON 数据 模型 - 请参阅 this answer

关于模型:控制器动作的参数不应该是一个数组——它应该是一个模型类,包含和数组成员——当然你的 JSON 应该反映这个结构。

【讨论】: