2013-04-09 2 views
0

У меня есть модель задачи:Отправить модель со списком в контроллер через AJAX

public class Task 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public DateTime? DueDate { get; set; } 
    public int ProjectId { get; set; } 
    public virtual ICollection<Useraccount> Useraccounts { get; set; } 
    ... 
} 

я хотел бы, чтобы отправить модель задачи на мой контроллер через AJAX:

function sendForm(projectId, useraccountIds, name, date, description, target) { 
    $.ajax({ 
     url: target, 
     type: "POST", 
     contentType: 'application/json', 
     data: JSON.stringify({ 
      projectId: projectId, 
      useraccounts: useraccountIds, 
      name : name, 
      dueDate : date, 
      description : description 
     }), 
     success: ajaxOnSuccess, 
     error: function (jqXHR, exception) { 
      alert('Es ist ein Fehler bei der Übertragung aufgetreten.'); 
     } 
    }); 
} 

Это работает отлично но есть большая проблема с useraccounts. Переменная useraccountIds представляет собой целочисленный массив, но не может быть сопоставлена ​​с ICollection Useraccounts моей модели задачи.

Как я могу создать объект useraccount для каждого идентификатора и сопоставить его с коллекцией useraccounts? Этим объектам не нужно больше, чем его идентификатор.

ответ

0

Как я могу создать объект useraccount для каждого идентификатора и сопоставить его с коллекцией учетных записей пользователей? Этим объектам не требуется больше, чем его идентификатор .

Тогда вам нужно только объявить его как:

public virtual IEnumerable<int> Useraccounts { get; set; } 

Если Task является юридическим лицом и не ViewModel, то было бы лучше, чтобы написать ViewModel для вашей задачи, так как вы упомянули, вы не будете нужны другие свойства от Useraccount, кроме Id.

UPDATE: Создайте свой Useraccounts тоже в JavaScript:

var useraccounts = { 
{ Id: value1 }, 
{ Id: value2 } 
}; 

затем включить его в свой пост:

data: JSON.stringify({ 
    projectId: projectId, 
    useraccounts: useraccounts , 
    name : name, 
    dueDate : date, 
    description : description 
}), 

Это не будет работать, если у вас есть DataAnnotation на модели UserAccount , И если вы это сделаете, это будет беспорядок, так как вам придется скопировать все необходимые поля Useraccount в представление, поместить его в скрытое поле (взломанное) и отправить его обратно методу.

+0

Благодарим за предложение. Задача - это реальная модель сущности. К сожалению, мы не используем модели просмотра для получения данных из представления контроллеру, мы просто отправляем модели просмотра с контроллера на представление. Есть ли другой подход? «Комплексный объект Json» или что-то вроде этого? – mosquito87

+0

Вы отправляете модель просмотра с контроллера на вид, но не наоборот? Это странно. Во всяком случае, я обновлю ответ, вернусь через некоторое время. –

+0

Да, я просто сделал то же самое, что вы опубликовали несколько минут назад, и в основном это работает. Но мой объект useraccount довольно сложный, есть еще несколько свойств, которые требуются (имя, адрес электронной почты, пароль), поэтому проверка ModelState.IsValid не выполняется. :( Я думаю, что нам нужно передумать наш дизайн ... – mosquito87

Смежные вопросы