如何从整数列表中设置选择元素的值和文本值
本文关键字:元素 文本 选择 设置 整数 列表 | 更新日期: 2023-09-27 18:07:36
如何为下拉列表设置值和文本值,同时将其绑定到视图模型?
我有一个数量列表,从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>
My view model:
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)
我认为这是最好的方法
我还没有添加评论的声誉,这就是为什么我把它作为一个单独的答案发布。你可以在这里找到解决问题的方法,我想:Asp。Net MVC与下拉列表,和selectlistiitem辅助
基本上,你需要有一个IEnumerable的SelectListItem,然后在View的SelectList构造函数中指定Text和Value字段。