使用ASP.NET MVC Jquery Ajax序列化表单对象和集合
我正在学习使用VS2010和jQuery1.7.1的ASP.NETMVC4。我无法将我的收藏序列化回控制器。 我使用它将我的模型序列化为JSON对象 这是我的控制器:使用ASP.NET MVC Jquery Ajax序列化表单对象和集合,jquery,serialization,model-view-controller,Jquery,Serialization,Model View Controller,我正在学习使用VS2010和jQuery1.7.1的ASP.NETMVC4。我无法将我的收藏序列化回控制器。 我使用它将我的模型序列化为JSON对象 这是我的控制器: public class CustomerController : Controller { public ActionResult Index() { CustomerViewModel model = new CustomerViewModel(); model.Orders
public class CustomerController : Controller
{
public ActionResult Index()
{
CustomerViewModel model = new CustomerViewModel();
model.Orders = GetOrders().ToList();
return View(model);
}
[HttpPost]
public ActionResult Save(CustomerViewModel model)
{
if (ModelState.IsValid)
{
}
return View(model);
}
private IEnumerable<Order> GetOrders()
{
List<Order> orders = new List<Order>();
orders.Add(new Order() { OrderID = 1, CustomerID = 1, TotalAmount = 100.99M, OrderName = "Order1", Discount = 5.00M, TotalItems = 5, OrderDate = DateTime.Now });
orders.Add(new Order() { OrderID = 2, CustomerID = 1, TotalAmount = 101.99M, OrderName = "Order2", Discount = 6.00M, TotalItems = 6, OrderDate = DateTime.Now });
orders.Add(new Order() { OrderID = 3, CustomerID = 1, TotalAmount = 102.99M, OrderName = "Order3", Discount = 6.00M, TotalItems = 7, OrderDate = DateTime.Now });
orders.Add(new Order() { OrderID = 4, CustomerID = 1, TotalAmount = 103.99M, OrderName = "Order4", Discount = 7.00M, TotalItems = 8, OrderDate = DateTime.Now });
orders.Add(new Order() { OrderID = 5, CustomerID = 1, TotalAmount = 104.99M, OrderName = "Order5", Discount = 8.00M, TotalItems = 9, OrderDate = DateTime.Now });
orders.Add(new Order() { OrderID = 6, CustomerID = 1, TotalAmount = 105.99M, OrderName = "Order6", Discount = 9.00M, TotalItems = 10, OrderDate = DateTime.Now });
return orders;
}
}
公共类CustomerController:控制器
{
公共行动结果索引()
{
CustomerViewModel模型=新CustomerViewModel();
model.Orders=GetOrders().ToList();
返回视图(模型);
}
[HttpPost]
公共操作结果保存(CustomServiceWModel模型)
{
if(ModelState.IsValid)
{
}
返回视图(模型);
}
私有IEnumerable GetOrders()
{
列表顺序=新列表();
添加(新订单(){OrderID=1,CustomerID=1,TotalAmount=100.99M,OrderName=“Order1”,折扣=5.00M,TotalItems=5,OrderDate=DateTime.Now});
添加(新订单(){OrderID=2,CustomerID=1,TotalAmount=101.99M,OrderName=“Order2”,折扣=6.00M,TotalItems=6,OrderDate=DateTime.Now});
添加(新订单(){OrderID=3,CustomerID=1,TotalAmount=102.99M,OrderName=“Order3”,折扣=6.00M,TotalItems=7,OrderDate=DateTime.Now});
添加(新订单(){OrderID=4,CustomerID=1,TotalAmount=103.99M,OrderName=“Order4”,折扣=7.00M,TotalItems=8,OrderDate=DateTime.Now});
添加(新订单(){OrderID=5,CustomerID=1,TotalAmount=104.99M,OrderName=“Order5”,折扣=8.00M,TotalItems=9,OrderDate=DateTime.Now});
添加(新订单(){OrderID=6,CustomerID=1,TotalAmount=105.99M,OrderName=“Order6”,折扣=9.00M,TotalItems=10,OrderDate=DateTime.Now});
退货订单;
}
}
视图:
客户详细信息
m、 客户名称)%>
m、 客户名称)%>
m、 Customer.LastName)%%>
m、 Customer.LastName)%%>
m、 客户邮箱地址)%>
m、 客户邮箱地址)%>
m、 客户电话号码)%%>
m、 客户电话号码)%%>
订单编号
订单名称
总金额
项目总数
$(函数(){
$('form')。提交(函数(e){
var customerViewModel=$(this.serializeObject();
var allOrders=新数组();
var顺序=null;
var orderRows=$('#tblOrdersGrid')。find('tr')。not(':first');
$.each(orderRows,function(i,orderItem){
顺序=新对象();
order.OrderID=$(orderItem).find('#tdOrderID').text();
order.OrderName=$(orderItem).find('#tdOrderName').text();
order.TotalAmount=$(orderItem).find('#tdTotalAmount').text();
order.TotalItems=$(orderItem).find('#tdTotalItems').text();
allOrders.push(订单);
});
customerViewModel.Orders=allOrders;
//customerViewModel['Orders']=allOrders;
$.post(“”,CustomServiceWModel,函数(数据){
警报(“已成功保存”);
});
返回false;
});
});
模型类:
[Serializable]
public class Customer
{
public Customer()
{
this.CreatedDate = DateTime.Now;
}
public int CustomerID { set; get; }
[Required(AllowEmptyStrings = false)]
public string FirstName { set; get; }
[Required(AllowEmptyStrings = false)]
public string LastName { set; get; }
[Required(AllowEmptyStrings = false)]
public string PhoneNumber { set; get; }
[Required(AllowEmptyStrings = false)]
public string EmailAddress { set; get; }
[DataType(DataType.Date)]
public DateTime CreatedDate { set; get; }
}
[Serializable]
public class Order
{
public Order()
{
this.OrderDate = DateTime.Now;
}
public int OrderID { set; get; }
public int CustomerID { set; get; }
[Required(AllowEmptyStrings = false)]
public string OrderName { set; get; }
[Required()]
public decimal TotalAmount { set; get; }
[DataType(DataType.Date)]
public DateTime OrderDate { set; get; }
public decimal Discount { set; get; }
public decimal TotalItems { set; get; }
}
[Serializable]
public class CustomerViewModel
{
public CustomerViewModel()
{
this.Customer = new Customer();
this.Orders = new List<Order>();
}
public Customer Customer { get; set; }
public List<Order> Orders { get; set; }
}
[可序列化]
公共类客户
{
公众客户()
{
this.CreatedDate=DateTime.Now;
}
public int CustomerID{set;get;}
[必需(AllowEmptyStrings=false)]
公共字符串名{set;get;}
[必需(AllowEmptyStrings=false)]
公共字符串LastName{set;get;}
[必需(AllowEmptyStrings=false)]
公共字符串PhoneNumber{set;get;}
[必需(AllowEmptyStrings=false)]
公共字符串电子邮件地址{set;get;}
[数据类型(DataType.Date)]
公共日期时间CreatedDate{set;get;}
}
[可序列化]
公共阶级秩序
{
公共秩序()
{
this.OrderDate=DateTime.Now;
}
公共int-OrderID{set;get;}
public int CustomerID{set;get;}
[必需(AllowEmptyStrings=false)]
公共字符串OrderName{set;get;}
[必需()]
公共十进制总数{set;get;}
[数据类型(DataType.Date)]
public DateTime OrderDate{set;get;}
公共十进制折扣{set;get;}
公共十进制TotalItems{set;get;}
}
[可序列化]
公共类CustomServiceWModel
{
公共CustomerServiceModel()
{
this.Customer=新客户();
this.Orders=新列表();
}
公共客户客户{get;set;}
公共列表顺序{get;set;}
}
我可以将customer对象恢复到controller,但不知何故,我的订单集合没有恢复绑定。请参考以下屏幕截图:
任何线索都将不胜感激
更新1:
退房。一旦你有了一个好的JS对象,你可以添加任何你想要的东西。一旦你准备好了,你就可以简单地
然后
$.post('<%= Url.Action("Save", "Customer") %>',
JSON.stringify(customerViewModel),
function (data) {
alert('Successfully saved.');
});
$.post(“”,
stringify(customerViewModel),
功能(数据){
警报(“已成功保存”);
});
我99%确定您不能将表单序列化()
然后追加订单。如果您查看http请求(在Chrome->Dev Tools(F12)、Network选项卡、Filter、XHR中),我敢打赌该请求是一个经过Url编码的表单,并且
var customerViewModel = $(this).ToJson(); // or whatever you call this function
customViewModel.Orders = [];
var orderRows = $('#tblOrdersGrid').find('tr').not(':first');
$.each(orderRows, function (i, orderItem) {
order = {};
order.OrderID = $(orderItem).find('#tdOrderID').text();
order.OrderName = $(orderItem).find('#tdOrderName').text();
order.TotalAmount = $(orderItem).find('#tdTotalAmount').text();
order.TotalItems = $(orderItem).find('#tdTotalItems').text();
customViewModel.Orders.push(order);
});
$.post('<%= Url.Action("Save", "Customer") %>',
JSON.stringify(customerViewModel),
function (data) {
alert('Successfully saved.');
});