2012-02-19 48 views
1

我有一個父模型與子模型的列表。在視圖我渲染使用模板,像這樣Asp.net Mvc如何使用DropDownListFor而不設置在控制器中選擇

@Html.EditorFor(model => model.ChildItems) 

在我這滴子模型模板downlist

@Html.DropDownListFor(model => model.Quantity, 
     new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 })) 

的孩子,但我不知道如何設置所選項目。

我看到的大多數例子都是簡單的控制器創建列表,設置選中並傳遞給視圖。

除非我是在控制器做類似的東西

ViewBag["Child_1_SelectedItem"] = children[0].Quantity 
ViewBag["Child_2_SelectedItem"] = children[1].Quantity 

,我不看我怎麼會得到的觀點理解,在所有。

回答

1

上有SelectList構造函數接受選定項的另一重載,所以你幾乎沒有與你的第二個代碼片段

int[] array = { 1, 2, 3 }; 
var list = new SelectList(array, 1); 

鑑於此,你可以改變你的代碼:

@Html.DropDownListFor(model => model.Quantity, 
    new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, model.Quantity)) 

編輯: 看來你不能訪問第一個參數(這是有道理的)以外的lambda參數,但你應該能夠做到這一點(假設Model是與模型相同的類型,細微差別):

@Html.DropDownListFor(model => model.Id, 
    new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, Model.Id)) 

或者,使用一個簡單的變量:

@{ 
    int selectedQuantity = Model.Quantity; 
} 

@Html.DropDownListFor(model => model.Id, 
    new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, selectedQuantity)) 
+0

我認爲這是它太當我看到過載。但它奇怪地抱怨它不知道什麼型號。無法解析符號模型。 – Matt 2012-02-19 17:36:05

+0

我已經更新了我的答案。 – 2012-02-19 19:25:02

+0

謝謝Steve!我剛剛創建了一個簡單的示例項目,並達成了相同的實現。 – Matt 2012-02-19 20:11:17

1

你通常會做:

var quantities = new List<SelectListItem>(new[] { 
     new SelectListItem { 
      Selected = true, 
      Text="1", 
      Value="1" 
     }, 
     new SelectListItem { 
      Text="2", 
      Value="2" 
     } 
     .... 

然後:

@Html.DropDownListFor(model => model.Quantity, quantities) 

似乎惱人的,但你可以建立這個控制器是這樣的:

var q = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
List<SelectListItem> list = new List<SelectListItem>(); 
foreach (var item in q) 
{ 
    if(children[item].Quantity)// dunno what is in this property... 
    {//if Quantity is bool you could directly set Selected then.. 
     list.Add(new SelectListItem { Selected = true, Text = item.ToString() }); 
    } else { 
     list.Add(new SelectListItem { Text = item.ToString() }); 
    } 
} 

然後通過你的list到視圖。或者你可以在視圖本身的@{..}代碼塊中執行此操作。

相關問題