2

我有一个具有 2 个属性的视图模型,第一个属性是 Model 对象,第二个属性是 List 。在我看来,我有 2 个部分。

第一部分填充第一个对象的数据,名字、姓氏、电子邮件和其他一些东西。

我的观点的第二部分是用户添加多个地址的 webgrid。

现在我的问题是什么,我的控制器上有一个 JSON 操作,它从表单获取数据,将它们添加到 viewmodel List 属性,但没有任何反应。

我检查了数据是否来自视图,添加到视图模型但每次视图模型为空。

[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) {} }); }; 

4

1 回答 1

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) {

        } 
    }); 
}
于 2013-02-25T13:57:21.990 回答