通过ajax将带有列表的模型发送到控制器

时间:2013-04-09 07:03:34

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

我有一个任务模型:

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。

我如何为每个id创建一个useraccount对象并将其映射到useraccounts集合?这些对象不需要超过其id。

1 个答案:

答案 0 :(得分:0)

  

我如何为每个id创建一个useraccount对象并将其映射到   useraccounts集合?那些对象不需要超过它   标识。

然后你只需将其声明为:

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

如果Task是一个实体而不是一个viewmodel,那么最好为你的Task编写一个viewmodel,因为你提到除{{1}之外你不需要Useraccount的其他属性}}

<强>更新 也可以在javascript中构建Id

Useraccounts

然后将其包含在您的帖子中:

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

如果您在Useraccount模型上有数据注释,那将无效。如果你这样做,那就太乱了,因为你必须将data: JSON.stringify({ projectId: projectId, useraccounts: useraccounts , name : name, dueDate : date, description : description }), 的所有必填字段复制到视图中,把它放在一个隐藏的字段中(hacky)并将它发送回方法。