2011-04-25 133 views
0

這個問題相當有趣: 如何將集合傳遞給控制器​​時,我有創建模板的詳細類型視圖。 這是我的ViewModel:asp.net mvc如何將集合傳遞給控制器​​

public class AgencyOfficiesItem 
    {  
     public string Address { get; set; } 
     public List<PhoneItem> Phones { get; set; } 
     public List<SelectListItem> CitiesList { get; set; } 
    } 

public class PhoneItem { 
     public string Phone { get; set; } 
     public string PhoneOperator { get; set; } 
    } 

所以,我想創建一個用於創建電話對象,它具有電話運營商和電話號碼字段的視圖。但是,有趣的是,我想從電話對象獲得一個集合並將它們傳遞給控制器​​。有任何想法嗎?

+0

你看着這個:[Model Binding To List](http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx) – R0MANARMY 2011-04-25 22:33:41

回答

2

如果你先走一步,做這樣的事情在你看來:

@using(Html.BeginForm... // I'm doing this from memory, check the arguments 
{ 
    for(int idx = 0; idx < Model.Phones.Count; idx++) 
    { 
     @Html.EditorFor(m => m.Model.Phones[idx].Phone) 
     @Html.EditorFor(m => m.Model.Phones[idx].PhoneOperator) 
    } 
    // similar for cities, other model properties, etc. 
} 

,並宣佈你的POST方法如下

[HttpPost] 
public ActionResult OnPostBack(<modeltype> arg) 
{ 
    if(ModelState.IsValid) 
    { 
     // action logic, etc. 

那麼就可以成功。 MVC將定義生成的文本框,以便能夠在回發時將它們與模型鏈接起來。我相信它所做的是在文本框中聲明name屬性,例如Phones_1_Phone。您可以通過在瀏覽器中查看生成的HTML來進行檢查。

順便說一句,還有其他方法可以使這個工作。我相信,您可以使用密鑰,使用字典<>而不是列表<>和稀疏數組。當然,你會想要做的不僅僅是在你的頁面上生成一堆文本框 - 一些標籤會很好:)。

我發現這個以及更多的很棒的教程是來自Apress的Steven Sanderson的Pro ASP.NET MVC 2框架。幾個月前我開始對MVC一無所知,現在我對它很滿意(儘管還不是專家)。

哎呀,忘了提及一些重要的東西:我的例子使用MVC3和它的Razor視圖引擎。如果你不使用MVC3,你需要將它翻譯成MVC2語法。但是你應該給MVC3一下,我發現它比它的前輩更直觀。更不用說「羅嗦」了。

+0

謝謝,但我瞭解這種方法。問題是我的頁面不是用於編輯的,而是用於創建的。我不知道會有多少文本框。例如,我有一個手機領域,如果用戶想再添加一個,他點擊按鈕「添加」,然後出現一個字段。 – Alex 2011-04-26 08:50:13

相關問題