2013-02-14 4 views
2

У меня есть viewmodel, который имеет 2 свойства, первое свойство - объект Model, а второе свойство - List. В моем представлении у меня есть 2 части.MVC ViewModel issue

Первая часть заполняет данные для первого объекта, имя, фамилию, адрес электронной почты и некоторые другие материалы.

Вторая часть моего представления - веб-страница, в которой пользователь добавляет несколько адресов.

Теперь, в чем моя проблема, у меня есть действие JSON на моем контроллере, которое получает данные из формы, добавляет их в свойство ListModel List, но ничего не происходит.

Я проверил, что данные поступают из представления, добавлены в режим просмотра, но каждый раз, когда пульт 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); 
} 

Я использую 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

Вы разжег Fiddler, чтобы увидеть, если есть ошибка? –

+0

Я не использую скрипач, у меня есть расширение Chrome, которое показывает мне, если у меня есть ошибки javascript. Я не получаю никаких ошибок от javascript. Но, похоже, это не работает. – 2013-02-14 10:36:01

+1

Поверьте мне, попробуйте fiddler, см. Ошибку 500. –

ответ

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

     } 
    }); 
}