【问题标题】:AJAX POST function is returning an error before it even goes through POST method in controllerAJAX POST 函数在通过控制器中的 POST 方法之前返回错误
【发布时间】:2020-08-05 19:56:08
【问题描述】:

我有一个像这样的 AJAX 函数

 $.ajax({
    type: "POST",
    url: "@IGT.baseUrl/JODetails/SpecialOrderSelection",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ allParts: array }),
    dataType: "json",
    traditional: true,
    success: function () {
       alert('Success!');
    },
     error: function () {
       alert('Error! ');
    }
    });

数组没有发送到我的方法,看起来像这样

public ActionResult SpecialOrderSelection(ItemViewModel model, ItemPartViewModel[] allParts)
{
       
     if (ModelState.IsValid)
     {
        JobOrder jobOrder = db.JobOrders.Find(model.Id);
        if (jobOrder == null)
           {
              return HttpNotFound();
           }
        ViewBag.JobOrderID = jobOrder.ID;
        TempData["model"] = model;
        return RedirectToAction("SpecialOrderSummary", new { id = model.Id });
     }
            
     return View(model);
            
}

这是我的 itemViewModel

 public class ItemViewModel
    {
        [Required]
        public int Id { get; set; }
        [Required]
        public int JobId { get; set; }
        public string ItemId { get; set; }
        public string ItemName { get; set; }
        public string MFGNumber { get; set; }
        public IList<ItemPartViewModel> Parts { get; set; }      
    }

这是我的 ItemPartView 模型

 public class ItemPartViewModel
    {
        [Required]
        public int ID { get; set; }
        public int ItemID { get; set; }
        public string PartID { get; set; }
        public string MFGNumber { get; set; }
        public string PartName { get; set; }
        public float QtyInItem { get; set; }
        public float Qty { get; set; }
        public bool MoveAll { get; set; }
        public float OnHand { get; set; }
        public float OnWorkOrder { get; set; }
        public float Committed { get; set; }
        public float FSTK { get; set; }

        // This is the additional property to contain what user picks
        public PartActionType SelectedActionType { get; set; }
    }

allParts 返回为 NULL(我从控制台日志中确认该数组是其中的数据),并且视图页面响应“错误!”在代码甚至通过 POST 方法运行之前的消息。

这是为什么?

【问题讨论】:

  • "@IGT.baseUrl" 这是视图的一些类助手吗?也许你不能调用 C# 分类在 ajax 中?
  • 您是否检查了浏览器 DevTools 中的网络选项卡以查看您的请求是通过哪个 URL 发出的?如果是 CORS 请求,大多数浏览器会在 POST 上执行 OPTION 请求,以验证 URL 是否允许 CORS。这将立即导致错误并且不会调用您的方法
  • @witheroux 它转到方法,只是弹出警报“错误”消息
  • 您是否还发布了model 数据?你的ItemViewModel 上是否有数据验证? ModelState.IsValid 的值是多少?
  • 问题是它正在自动发布。所以我添加了 event.prevent 默认值,并且我现在通过我的 ajax 传递视图模型@jasen

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


【解决方案1】:

你为什么使用JSON.stringify()方法?

只需发送原始 json 对象即可使用 ajax。

$.ajax({
    type: "POST",
    url: "@IGT.baseUrl/JODetails/SpecialOrderSelection",
    contentType: "application/json; charset=utf-8",
    data: { allParts: array },
    dataType: "json",
    traditional: true,
    success: function () {
       alert('Success!');
    },
    error: function () {
       alert('Error! ');
    }
});

【讨论】:

  • 因为 allParts 一直返回 null
  • 发布您的ItemViewModelItemPartViewModel 类和array 的json。它将帮助我们分析您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多