2012-08-24 25 views
3

我對C#相當陌生,並且正在創建我的第一個MVC項目,並且很難弄清楚將3個不同類型的參數傳遞給控制器​​動作。這裏是我的控制器方法:將混合:list <>,對象和原語傳遞給一個ASP MVC控制器動作的方法論

public ActionResult Create(Notification notification, string hash, list<int> users){ 
    //code inside method irrelevant... 
} 

和我的通知模型:

public class Notification 
{ 
    public int ID { get; set; } 
    public string ApplicationID { get; set; } 
    public string Description { get; set; } 
    public System.DateTime DateStamp { get; set; } 
} 

之前我加入了名單<>參數它好工作由具有發佈的數據(或查詢字符串),像這樣:

ApplicationID=1&Description=yo&hash=abcdefg 

它神奇地知道這兩個參數('ApplicationID'和'Description')屬於通知對象。但是現在我想添加一個列表<> ints。

這是可以做的事情,你將如何格式化數據/查詢字符串通過?

+0

[這篇文章](http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx)可能會幫助 –

+0

感謝OP和@Darin Dimitrov!我用這個問題和示例代碼作爲我有一個類似問題的基礎:http://stackoverflow.com/questions/20915681/how-to-pass-a-complex-view-model-into-a-controller-action -via-ajax-call-with-jso – longda

回答

3

這是不是可以做

是。

以及如何格式化傳遞的數據/查詢字符串?

像這樣:

ApplicationID=1&Description=yo&hash=abcdefg&users=1&users=2&users=3 

或者如果你喜歡這樣的:

ApplicationID=1&Description=yo&hash=abcdefg&users[0]=1&users[1]=2&users[2]=3 

而且你可能會發現following blog post一個有用的閱讀。

但是,在將控制器動作簽名轉換爲一些代碼化的代碼和閱讀器之前,必須水平循環幾個屏幕才能看到這個動作需要的數百萬個參數,停止瘋狂並引入視圖模型:

public class CreateViewModel 
{ 
    public Notification Notification { get; set; } 
    public string Hash { get; set; } 
    public List<int> Users { get; set; } 
} 

然後:

public ActionResult Create(CreateViewModel model) 
{ 
    //code inside method irrelevant... 
} 

然後:

notification.applicationID=1&notification.description=yo&hash=abcdefg&users[0]=1&users[1]=2&users[2]=3 
+0

真的很愚蠢的問題:有沒有一種簡單的方法來使用它與自定義模型聯編程序?想象一下,我們正在發送Notfication的多態對象......說出一切都從Notification繼承的AlertNotification,WarningNotification或ErrorNotification。哦,另一個假設是使用ajax調用發佈JSON數據而不是查詢字符串表示法。 – longda

+1

@longda,如果您打算使用JSON,那麼您寧願使用一些自定義JSON序列化器/轉換器來處理多態對象。 –

相關問題