以下是相關的代碼。請注意,我在Notepad ++中完成了這項工作,而不是在我的代碼中複製我的項目。如果我拼錯了一個類名,假定它在我的代碼中沒有拼寫錯誤。沒有編譯錯誤。正確的方式使用DropDownListFor與原始類型的列表?
型號:
public class MyViewModel
{
public int SelectedSomething { get; set; }
public IList<int> Somethings { get; set; }
}
控制器:
public class MyController
{
public ActionResult Index()
{
var viewModel = new MyViewModel();
viewModel.Somethings = Enumerable.Range(1, 12).ToList();
return View(viewModel);
}
}
視圖(剃刀):
@Html.DropDownListFor(x => x.SelectedSomething, new SelectList(Model.Somethings, Model.SelectedSomething), "Select an Option")
這將 「工作」,但不會對任何的設定值呈現option
中的元素select
:
<select>
<option value="">Select an Option</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select>
我知道需要在屬性名用來呈現在option
元素value
和text
的SelectList
constructor的,但它是沒有用的(,我可以看到)使用原始的集合時類型如int
。
問:
我知道我可以改變我的視圖模型的IList<int>
到IList<SelectListItem>
,創造SelectListItem
對象來表示每個int
,但似乎有點可笑(我想構造不應該離開的價值空白,並應該默認使用文字)。我在這裏錯過了一些明顯的東西,還是我不得不在這裏使用原始類型?
@Html.DropDownListFor(x => x.SelectedSomething,
Model.Somethings.ToSelectList(n => n, v => v),
"Select an Option")
對於int收集您可能需要使用n => n.ToString()
您的姓名選擇:
我喜歡它。將在明天的工作中使用它!代碼看起來合法,標記爲答案,謝謝! – Gromer