2015-12-28 103 views
0

我有一個數組,我想綁定到一個下拉列表。下面是代碼:ASP.NET MVC綁定數組DropDownFor

@for (int i = 1; i <= 5; i++) 
{ 
    @for (int j = 1; j <= 7; j++) 
    { 
     @Html.DropDownListFor(m => @Model.Periods, new SelectList(@Model.Items, "Id", "Title", @Model.ScheduleList[i, j])) 
    } 
} 

@ Model.Periods是一個普通的整數數組。 @ Model.ScheduleList是一個二維整數數組,它保存應該在綁定時選擇的選項的值。 如果我取代:

@Model.Periods 

與:

@Model.Periods[i*10 + j] 

正在示出所選擇的值,但所產生的選擇輸入具有像例如週期[34]名稱,不只是週期和我null在我的視圖模型回發。 所以我的問題是:我如何將一個oridnary數組綁定到下拉列表並將它傳遞給另一個數組?

+0

很難理解你試圖達到什麼結果,你想要5 * 7 = 35下拉? –

+0

是的,我想要保存到數據庫的35個下拉列表,以後用戶可以編輯它們。 In @ Model.ScheduleList我有數據庫中的值,但我無法更改生成的選擇輸入以顯示默認的第一個元素 – snaksa

+1

'@ Model.Periods [i * 10 + j]'幾乎'正確 - 如果任何期間[X](其中X從0到34包括在內)中的任何一個將會丟失,則您必須使用期間[0]至期間[34]中的所有值回傳該數據沒有收到正確的數據。數組的索引應嚴格從0開始。因此,@ @ Model.Periods [(i-1)* 10 +(j-1)]'應該沒問題。 –

回答

1

@ Model.Periods [i * 10 + j]不是100%正確的 - 要將該數據發佈到您的控制器,您必須將所有值從Periods[0]直接發送回Periods[5 * 7 - 1]

如果Periods[X](其中X從0到34包括在內)中的任何一個都將丟失,您將不會收到正確的數據。

Periods[0] = 1 
Periods[1] = 2 
Periods[2] = 3 
Periods[4] = 4 

將被綁定到以下數組:還數組的索引應當嚴格從0

因此,例如啓動[1, 2, 3],因爲有與順序索引沒有有效載荷項目2和4

之間

對於有效載荷:

Periods[1] = 1 
Periods[2] = 2 
Periods[3] = 3 
Periods[4] = 4 

結果將是null - 所述陣列的第一索引中缺少有效載荷。

所以對於你可能@Model.Periods[(i-1)*10 + (j-1)]應該沒問題。

如果你真的需要你的指數是不連續的,您可以使用此解決方法:爲每個元素添加隱藏字段:

<input type="hidden" name="Periods.Index" value="{your index}" /> 

所以,你的代碼看起來是這樣的:

@for (int i = 1; i <= 5; i++) 
{ 
    @for (int j = 1; j <= 7; j++) 
    { 
     <input type="hidden" name="Periods.Index" value="@(i * j)" /> 
     @Html.DropDownListFor(m => @Model.Periods, new SelectList(@Model.Items, "Id", "Title", @Model.ScheduleList[i, j])) 
    } 
} 

但是,這不是在您當前的情況下使用。有關索引器的更多信息可以在網上找到 - 例如。 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/