2014-04-12 49 views
1

我有以下的控制方法簽名:不能通過與數組屬性對象MVC控制器的方法

public void DiscoveryMailboxAnnotate(string note, List<string> ids) 

,我試圖張貼下面的JavaScript對象到這個方法:

var data = { 
       note: 'note', 
       ids: ['1','2'] 
      }; 
$.ajax({ 
        type: "POST", 
        url: '/Supervise/DiscoveryMailboxAnnotate', 
        data: data, 
        error: function (xhr, status, error) { 
        }, 
        success: function (response) { 

        } 
       }); 

注意我的控制器方法中的參數已填充,但不是List<string> id參數。我究竟做錯了什麼?

+0

它的ID不是id請參見 –

+0

我有ID,每個地方都沒有使用ID –

回答

1

認爲你有一個模型綁定的問題,試着改變你的方法簽名上的 List<int> ,並認爲你會發現它的作品。

編輯: 但這是一個模型的投標問題。屬性是默認私有的,所以更改您的視圖模型,以便他們是公衆:

 public class DiscoveryMailboxAnnotateViewModel 
    { 
     public string Note { get; set; } 
     public List<string> Ids { get; set; } 
    } 

然後解決您的控制器:

[HttpPost] 
    public void DiscoveryMailboxAnnotate(DiscoveryMailboxAnnotateViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
     } 
    } 

然後JQuery的

<script> 
var model = { 
    Note: 'note', 
    Ids: ['11', '20', '30'] 
}; 
$.ajax({ 
    type: "POST", 
    url: '/Home/DiscoveryMailboxAnnotate', 
    data: JSON.stringify(model), 
    dataType: 'json', 
    contentType: 'application/json', 
    error: function (xhr, status, error) { 
    }, 
    success: function (response) { 

    } 
}); 

本文將解釋更多,綁定一個列表並沒有完全按照我的預期工作:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

+1

但是看一下ID數組,它們是字符串 –

+1

'['1','2']'是一個字符串數組... –

+0

感謝這一點,因爲這是深夜,這是如此瘋狂,我沒有意識到私人這麼公開是一個很好的提示屬性。但是,解析與視圖模型的情況完全相同,即將參數聲明爲控制器簽名的一部分。注意是填充,但列表或列表 ID爲空,我試過這兩種類型。 –

相關問題