C# 将KnockoutJS Observable数组传递给HTTP Post控制器方法的AJax调用失败

C# 将KnockoutJS Observable数组传递给HTTP Post控制器方法的AJax调用失败,c#,asp.net,ajax,asp.net-mvc,knockout.js,C#,Asp.net,Ajax,Asp.net Mvc,Knockout.js,我试图对Http控制器POST方法进行Ajax调用,从Ajax传递到控制器的数据是JSON数组,它是来自KnockoutJS的ObserverableArray。对HTTP控制器的AAX调用如下所示 $.ajax({ url: '/ORF/pdtInfo', type: 'POST', data: ko.toJSON(self.pdtDetails()),

我试图对Http控制器POST方法进行Ajax调用,从Ajax传递到控制器的数据是JSON数组,它是来自KnockoutJS的ObserverableArray。对HTTP控制器的AAX调用如下所示

 $.ajax({
                    url: '/ORF/pdtInfo',
                    type: 'POST',
                    data: ko.toJSON(self.pdtDetails()),
                    success: function (result) {
                        console.log("OrderRequest - Recorded inserted Sucessfully" );
                    },
                    error: function (errorThrown) {
                        console.log("OrderRequest - Recorded insert Failed" +errorThrown.responseText );
                        callHandleUserError("Request Failed");
                    }
                })
传递给控制器的
ko.toJSON(self.pdtDetails()),
数据如下

[{"pdtNeededTypes":["Individual","Other"],
  "stockNumber":"0054654354  |  y8fdts-Tg(hhhjhj)2Mnn/J          [Also Known as : O2 , OygR4-EhaFP]",
  "pdtNeeded":"Other",
  "pdtTypes":""}]
控制器方法如下所示,它接收数组作为输入参数

   public JsonResult pdtInfo(List<Models.ORFPdtInfo> orfpdtInfo)
    {
        try
        {
            if (Session["ORFData"] != null)
            {
                ORFData ORFData = Session["ORFData"] as ORFData;
                ORFData.pdtInfo = orfpdtInfo;
                Session["ORFData"] = ORFData;
                var result = new JsonResult()
                {
                    Data = orfpdtInfo,
                    MaxJsonLength = Int32.MaxValue
                };
                return result;
            }
            else
            {
                return Json(new { redirectUrl = Url.Action("Index", "ORF"), isRedirect = true });
            }
        }
        catch (Exception e)
        {
            return null;
        }
    }
public JsonResult pdtInfo(列表或fpdtinfo)
{
尝试
{
如果(会话[“ORFData”]!=null)
{
ORFData ORFData=会话[“ORFData”]作为ORFData;
ORFData.pdtInfo=orfpdtInfo;
会话[“ORFData”]=ORFData;
var result=new JsonResult()
{
数据=或fpdtinfo,
MaxJsonLength=Int32.MaxValue
};
返回结果;
}
其他的
{
返回Json(新的{redirectUrl=Url.Action(“Index”,“ORF”),isRedirect=true});
}
}
捕获(例外e)
{
返回null;
}
}
其中模型类ORFPdtInfo如下

public class ORFPdtInfo
{
    public List<string> pdtNeededTypes { get; set; }
    public string stockNumber { get; set; }
    public string pdtNeeded { get; set; }
    public string pdtTypes { get; set; }
}
公共类或fpdtinfo
{
公共列表pdtNeededTypes{get;set;}
公共字符串stockNumber{get;set;}
公共字符串pdtneed{get;set;}
公共字符串pdtTypes{get;set;}
}
ORFData是我编写电子邮件内容的类,我将数据从控制器传递到这个类,用于编写电子邮件正文内容

[Serializable]
public class ORFData
{
public List<ORFPdtInfo> pdtInfo { get; set; }

public string SerializedOrderData()
{
    StringBuilder orderText = new StringBuilder();
    for (int i=0;i<pdtInfo.Count();i++ ){
    orderText.AppendLine("<tr><td width='30%'>Pdt Needed </td><td width='70%'>" + pdtInfo[i].pdtNeeded + "</td></tr>");
    .... 
[可序列化]
公共类ORFData
{
公共列表pdtInfo{get;set;}
公共字符串SerializedOrderData()
{
StringBuilder orderText=新建StringBuilder();

对于(int i=0;i将
contentType:“application/json”
添加到POST方法AJAX调用中,解决了这个问题

如果在控制器操作中的
catch(异常e)
块中放置一个断点,它是否命中了?@callmmorrisson catch块在控制器中没有命中,而只是AJAX调用`error:function(ErrorSprown)`What statuscode正在返回?@CallumMorrisson Status code在AJAX错误中的位置?也许这可以帮助: