Javascript 如何通过json对象数组为嵌套对象赋值
这是我的模型课:Javascript 如何通过json对象数组为嵌套对象赋值,javascript,jquery,json,asp.net-mvc,nested,Javascript,Jquery,Json,Asp.net Mvc,Nested,这是我的模型课: public class SearchForFlight { public SearchForFlight() { Segments = new otherType(); } public int AdultCount { get; set; } public JourneyType JourneyType { get; set; } public string Sources { get; set; }
public class SearchForFlight
{
public SearchForFlight()
{
Segments = new otherType();
}
public int AdultCount { get; set; }
public JourneyType JourneyType { get; set; }
public string Sources { get; set; }
public otherType Segments { get; set; }
}
public class otherType
{
public string Origin { get; set; }
public string Destination { get; set; }
public FlightCabinClass FlightCabinClass { get; set;}
public DateTime PreferredDepartureTime { get; set;
public DateTime PreferredArrivalTime { get; set; }
}
现在,我的要求是将对象和嵌套对象一起发布到外部api。
所需的表单如下所示:
{
AdultCount: $("#AdultCount").val(),
JourneyType: $("#JourneyType :selected").text(),
PreferredAirlines: null,
Segments: [
{
Origin: $("#Origin").val(),
Destination: $("#Destination").val(),
FlightCabinClass: $("#FlightCabinClass").val(),
PreferredDepartureTime:$("#PreferredDepartureTime").val(),
PreferredArrivalTime: $("#PreferredArrivalTime").val(),
}
]
}
@Html.TextBoxFor(model => model.Segments.Origin)
因此,我创建了另一个类OtherType并将所有嵌套对象放入其中。
我从这个问题中得到了这个想法
现在,这是我的脚本标签,里面有所有的代码来发布简单对象和嵌套对象。但是嵌套对象的值是空的。
我应该如何在这里对代码建模
<script>
$(document).ready(function () {
$("#btnPost").click(function () {
var sof = {
AdultCount: $("#AdultCount").val(),
JourneyType: $("#JourneyType :selected").text(),
PreferredAirlines: null,
Segments: [
{
Origin: $("#Origin").val(),
Destination: $("#Destination").val(),
FlightCabinClass: $("#FlightCabinClass").val(),
PreferredDepartureTime: $("#PreferredDepartureTime").val(),
PreferredArrivalTime: $("#PreferredArrivalTime").val(),
}
],
};
$.ajax(
{
url: "/api/Flight/SearchFlight",
type: "Post",
data: sof,
success: function (data) {
alert(data);
}
});
});
});
</script>
请给出任何提示。删除段的数组[]。在$.ajax func中使用contentType和stringify。将生成的id用于原点。它可能不是“起源”。所以,请相应地更改它
<script>
$(document).ready(function () {
$("#btnPost").click(function () {
var sof = {
AdultCount: $("#AdultCount").val(),
JourneyType: $("#JourneyType :selected").text(),
PreferredAirlines: null,
Segments: {
Origin: $("#Origin").val(),
Destination: $("#Destination").val(),
FlightCabinClass: $("#FlightCabinClass").val(),
PreferredDepartureTime: $("#PreferredDepartureTime").val(),
PreferredArrivalTime: $("#PreferredArrivalTime").val(),
},
};
$.ajax(
{
url: "/api/Flight/SearchFlight",
type: "Post",
contentType: 'application/json',
data: JSON.stringify(sof),
success: function (data) {
alert(data);
}
});
});
});
</script>
$(文档).ready(函数(){
$(“#btnPost”)。单击(函数(){
变量sof={
成人计数:$(“#成人计数”).val(),
JourneyType:$(“#JourneyType:选定”).text(),
首选航空公司:空,
部分:{
原产地:$(“#原产地”).val(),
目的地:$(“#目的地”).val(),
FlightCabinClass:$(“#FlightCabinClass”).val(),
PreferredDepartTime:$(“#PreferredDepartTime”).val(),
PreferredArrivalTime:$(“#PreferredArrivalTime”).val(),
},
};
$.ajax(
{
url:“/api/Flight/SearchFlight”,
类型:“Post”,
contentType:'应用程序/json',
数据:JSON.stringify(sof),
成功:功能(数据){
警报(数据);
}
});
});
});
你的FlightCabinClass模型是什么?Segments
是一个对象,而不是集合,因此你无法创建数组。只需使用数据:$('form.Serialize(),
来序列化所有表单控件的所有值,或者如果您确实想手动编写所有这些,那么使用Segments.Origin=$(“#Segments_Origin”).val(),
等(请注意,您的元素将具有id=“Segments_Origin”
,而不是id=“Origin”
)是的,我已经更改了这些id值,但我必须将所有这些值发布到特定的air门户rest api,因此我试图按照api文档中给出的方式发布数据,否则它会使用$('form')回复错误的请求@StephenMueckeusing
将正确序列化所有表单控件,前提是您生成了正确的视图。为了方便起见,api最终返回了200个状态代码。我刚刚严格要求以文档中提到的格式提供rest api数据,但是ur Suggestion在@Karthik M RIf工作。如果您使用嵌套对象,最好的做法是使用JSON.stringify函数并提及application/json。如果不使用json.stringify,jquery的默认行为是将数据作为application/x-www-form-urlencoded发送