如何从整数列表中设置选择元素的值和文本值

本文关键字:元素 文本 选择 设置 整数 列表 | 更新日期: 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字段。