我有一个具有2个属性的viewmodel,第一个属性是Model对象,第二个属性是List。在我的视图中我有2个部分。
第一部分填充第一个对象的数据,名字,姓氏,电子邮件和其他一些东西。
我视图的第二部分是用户添加多个地址的webgrid。
现在我的问题是什么,我的控制器上有一个JSON操作,它从表单中获取数据,将它们添加到viewmodel List属性,但没有任何反应。
我检查过数据来自视图,添加到viewmodel但是每次viewmodel为空。
[Authorize]
public JsonResult addAddress(Address addr, CustomerViewModel model)
{
if (model.CAddress== null)
model.CAddress= new List<Address>();
model.CAddress.Add(addr);
return Json(model, JsonRequestBehavior.AllowGet);
}
[Authorize]
public JsonResult addAddress(Address addr, CustomerViewModel model)
{
if (model.CAddress== null)
model.CAddress= new List<Address>();
model.CAddress.Add(addr);
return Json(model, JsonRequestBehavior.AllowGet);
}
我正在使用Javascript:
function AddAddress()
{
var addID = $("#lstID option:selected").val();
var addName = $("#lstAddName option:selected").text();
var Address =
{
addID : addID.toString(),
addName : addName.toString()
};
$.ajax({
type: "POST",
url: "@Url.Action("addAddress","Customer")",
dataType: "json", contentType: "application/json; charset=utf-8",
data: JSON.stringify(Address),
success: function (data) {} }); };
答案 0 :(得分:0)
好吧,首先写一个真实的视图模型,而不是一些混合动力:
public class CustomerViewModel
{
public List<AddressViewModel> Addresses { get; set; }
... some other properties you already had
}
public class AddressViewModel
{
public string Id { get; set; }
public string Name { get; set; }
}
然后调整控制器动作以获取真实视图模型,而不是视图模型和域模型之间的混合和混合:
[Authorize]
[HttpPost]
public ActionResult AddAddress(CustomerViewModel model)
{
return Json(model);
}
最后调整你的AJAX调用:
function AddAddress() {
$.ajax({
url: '@Url.Action("AddAddress", "Customer")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
addresses: [
{
id : $('#lstID').val(),
name : $('#lstAddName option:selected').text()
}
],
someOtherPropertyOnYourViewModel: 'some other value'
}),
success: function (data) {
}
});
}