2013-04-09 101 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.'); 
     } 
    }); 
} 

这是工作的罚款但使用量有一个很大的问题。 变量useraccountIds是一个整型数组,但无法映射到我的任务模型的ICollection Useraccounts。

我如何能够创造一个useraccount对象为每个ID,并将其映射到useraccounts收藏?这些对象不需要比它的id更多。

回答

0

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

然后你只需要将它声明为:

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

如果Task是一个实体,而不是一个视图模型那么既然你提到这将是最好写一个视图模型为你的任务,你不会需要以外的Useraccount其他房产。

UPDATE: 建立你Useraccounts太在javascript:

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

然后将其包含在您的文章:

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

,如果你对你的Useraccount模型dataannotation这是行不通的。如果你这样做,然后它是一个烂摊子,你将有一个Useraccount的所有必填字段复制到视图,把它放在一个隐藏字段(哈克),并发送回的方法。

+0

谢谢您的建议。任务是一个真正的实体模型。 Unfortunatley我们不使用视图模型从视图中获取数据到控制器,我们只是将视图模型从控制器发送到视图。 有没有其他方法?一个“复杂的Json对象”或类似的东西? – mosquito87 2013-04-09 07:26:46

+0

您将视图模型从控制器发送到视图,但反之亦然?这真是太奇怪了。无论如何,我会更新答案,稍后再回来查看。 – 2013-04-09 07:30:12

+0

是的,我只是做了几分钟前发布的完全相同,基本上它的工作。 但我useraccount对象是相当复杂的,也有一些它需要更多的属性(姓名,电子邮件,密码),因此ModelState.IsValid检查失败。 :( 我认为我们必须重新思考我们的设计... – mosquito87 2013-04-09 07:45:55