[英]How to set the value and text values of a select element from a list of integers
如何在為下拉列表設置值和文本值的同時將其綁定到視圖模型?
我有一個數量列表,范圍從1到100。我想將此整數列表傳遞到我的視圖中,並在下拉列表中填充它們,並且其值和文本值等於相應的數量。 例如,我追求這樣的事情:
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
...
<option value="100">100</option>
</select>
我目前只得到:
<select>
<option>1</option>
<option>2</option>
<option>3</option>
...
<option>100</option>
</select>
我的視圖模型:
public class ProductViewModel : ViewModelBase
{
public ProductViewModel()
{
Quantities = new List<int>();
for (int i = 1; i <= 100; ++i)
{
Quantities.Add(i);
}
}
public int Quantity { get; set; }
public List<int> Quantities { get; set; }
// Other view model properties left out
}
我的控制器:
public ActionResult Test()
{
ProductViewModel model = new ProductViewModel();
return View(model);
}
我的觀點:
@model MyProject.Models.ProductViewModel
@Html.DropDownListFor(m => m.Quantity, new SelectList(Model.Quantities))
一種解決方法是使用LINQ:
new SelectList(Model.Quantities.Select(i => new {Text = i, Value = i}),
"Text", "Value")
匿名對象中的一個字段也可以,但是我發現單獨的字段更加明確。
否則,您可以將SelectList對象放入模型中,然后可以選擇創建單個SelectListItem
。 但是,從上面的技巧來看,這是我猜測的最短方法。
更新。 我將按原樣保留答案,但是Stephen Muecke對原始帖子的評論基本上使它無用。 正確的答案是您不需要這樣做,因為在將表單發布到服務器時會使用缺少值的文本的情況。
向您的視圖模型添加一個屬性:
public List<SelectListItem> AvailableQuantities { get; set; }
在控制器中,如下所示填充列表:
ProductViewModel model = new ProductViewModel();
model.AvailableQuantities.AddRange(model.Quantities.Select(item => new SelectListItem
{
Text = item.ToString(),
Value = item.ToString()
});
在視圖中:
@Html.DropDownListFor(m => m.Quantity, Model.AvailableQuantities)
最好的解決方案是按照以下方式使用您的模型:
public class TestModel
{
public IList<int> Quantities { get; set; }
public int SelectedQuantity { get; set; }
public IList<SelectListItem> QuantitiesSelectListItems
{
get
{
var list = (from item in Quantities
select new SelectListItem()
{
Text = item.ToString(),
Value = item.ToString(CultureInfo.InvariantCulture),
}).ToList();
return list;
}
}
public TestModel()
{
Quantities=new List<int>();
}
}
鑒於您可以執行以下操作:
@Html.DropdownListFor(c=>c.SelectedQuantity,Model.QuantitiesSelectListItems)
我認為這是最好的方法。
我還沒有添加評論的聲譽,這就是為什么我將其發布為單獨的答案。 您可以在這里找到解決問題的方法,我認為: 具有下拉列表和SelectListItem協助的Asp.Net MVC
基本上,您需要擁有一個SelectListItem的IEnumerable,然后在View的SelectList構造函數中指定Text和Value字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.