【问题标题】:MVC ViewModel issueMVC ViewModel 问题
【发布时间】:2013-02-14 10:30:46
【问题描述】:

我有一个具有 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) {} }); }; 

【问题讨论】:

  • 你有没有启动 Fiddler 看看是否有错误?
  • 我不使用提琴手,我有一个 Chrome 扩展程序,如果我有任何 javascript 错误,它会显示我。我没有从 javascript 中得到任何错误。但似乎无法正常工作。
  • 相信我,试试 fiddler,看看 500 错误。
  • 试用了 Fiddler,没有错误。
  • 您是如何发布表单中的数据的?

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

好的,先写一个真实的视图模型,而不是一些混合模型:

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

        } 
    }); 
}

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多