2013-04-09 102 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