C# 将KnockoutJS Observable数组传递给HTTP Post控制器方法的AJax调用失败
我试图对Http控制器POST方法进行Ajax调用,从Ajax传递到控制器的数据是JSON数组,它是来自KnockoutJS的ObserverableArray。对HTTP控制器的AAX调用如下所示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()),
$.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错误中的位置?也许这可以帮助: