С помощью этой модели КонтактыASP.NET MVC3 модель связующий данные некорректны, когда геттер используется против коллекции
public class Contact
{
public string Name { get; set; }
public ICollection<Phone> Phones { get; set; }
public Phone PrimaryPhone
{
get { return Phones.FirstOrDefault(x => x.Primary) ?? new Phone(); }
}
}
public class Phone
{
public bool Primary { get; set; }
public string PhoneNumber { get; set; }
public string Type { get; set; }
}
И этот контроллер
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Contact contact)
{
return View();
}
}
Когда я POST на индекс HomeController с помощью JQuery
(function ($) {
var myData = {
Name: 'Wesley Crusher',
Phones: [
{ Primary: false, PhoneNumber: '111-111-1111', Type: 'Business' },
{ Primary: true, PhoneNumber: '222-222-2222', Type: 'Personal' },
{ Primary: false, PhoneNumber: '333-333-3333', Type: 'Business' }
],
PrimaryPhone: { Primary: true, PhoneNumber: '111-111-1111', Type: 'Business' }
};
$.ajax({
url: '@Url.Action("Index", "Home")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(myData)
});
})(jQuery)
модель связующий некорректный выстраивается ICollection Телефон s. Данные:
- [0] Primary = ложь, PhoneNumber = "111-111-1111", Type = "Бизнес" MVC3ModelBinderJsonTesting.Models.Phone
- [1] Primary = верно, PhoneNumber = "111-111-1111", Type = "Бизнес" MVC3ModelBinderJsonTesting.Models.Phone
- [2] Primary = ложь, PhoneNumber = "333-333-3333", Type = "Бизнес" MVC3ModelBinderJsonTesting.Models.Phone
Номер телефона «111-111-1111» повторяется, а Тип - «Бизнес» вместо «Личный ». Является ли это ожидаемым поведением по какой-либо причине или это ошибка?
Я могу опубликовать образец проекта, если вы хотите, дайте мне знать.
В то время как модельный вяжущий считает, что это честная игра, кажется, все работает нормально, если отправляемый объект PrimaryPhone соответствует данным для основного телефона в массиве Phones. Я не думаю, что свойство PrimaryPhone можно изменить на метод в этом случае, но это может быть и другим способом исправить. Спасибо за понимание! – kendaleiv