将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败
Posted
技术标签:
【中文标题】将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败【英文标题】:AJax Call that pass KnockoutJS Observable Array to the HTTP Post Controller Method fails 【发布时间】:2021-07-24 22:43:30 【问题描述】:我正在尝试对 Http Controller POST 方法进行 Ajax 调用,从 ajax 传递到 Controller 的数据是 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()),
传递给 Controller 的数据是这样的
["pdtNeededTypes":["Individual","Other"],
"stockNumber":"0054654354 | y8fdts-Tg(hhhjhj)2Mnn/J [Also Known as : O2 , OygR4-EhaFP]",
"pdtNeeded":"Other",
"pdtTypes":""]
Controller 方法如下,接收数组作为输入参数
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;
模型类 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;
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>");
....
问题是当对 Controller 方法的 Ajax 调用自动转到错误函数时。我试图通过将它们放在控制台errorThrown.responseText
中来查看错误,但它是空的。我还在控制器中设置断点List<Models.ORFPdtInfo> orfpdtInfo
为空,ajax 调用没有将任何内容传递给控制器,我是否缺少模型类绑定的任何内容。非常感谢任何帮助
【问题讨论】:
如果你在 Controller Action 中的catch (Exception e)
块内设置断点,它会命中吗?
@CallumMorrisson 控制器中的 Catch 块没有命中,而只是 AJAX 调用 `error: function (errorThrown)`
返回什么状态码?
@CallumMorrisson 状态码在哪里出现 AJAX 错误?
也许这会有所帮助:***.com/questions/6186770/…
【参考方案1】:
将contentType: "application/json",
添加到 POST 方法 AJAX 调用修复了该问题
【讨论】:
以上是关于将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败的主要内容,如果未能解决你的问题,请参考以下文章
KnockoutJS:模板未在可观察数组更改时更新(仅在添加时,在删除时有效)
KnockoutJS - 可观察对象的可观察数组,包含来自 SQL 服务器的数据