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

时间:2015-08-13 10:17:28

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

如何设置下拉列表的值和文本值,同时将其绑定到视图模型?

我有一个从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))

4 个答案:

答案 0 :(得分:3)

一个解决方法是LINQ的一点点:

new SelectList(Model.Quantities.Select(i => new {Text = i, Value = i}),
               "Text", "Value")

匿名对象中的一个字段也可以,但我发现单独的字段更明确。

否则,您可以将SelectList对象放在模型中,然后可以选择创建单个SelectListItem。但是从上面你的诀窍是我猜的最短的方式。

更新。我会留下答案,但是Stephen Muecke对原帖的评论基本上没有用。正确的答案是你不需要这个,因为在表单发布到服务器时使用缺少值的文本。

答案 1 :(得分:1)

向viewmodel添加属性:

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)

答案 2 :(得分:1)

最佳解决方案是使用您的模型如下:

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)

我认为这是最好的方法。

答案 3 :(得分:0)

我还没有添加评论的声誉,这就是我将其作为单独答案发布的原因。您可以在此处找到问题的解决方案,我认为:Asp.Net MVC with Drop Down List, and SelectListItem Assistance

基本上,你需要有一个IEnumerable的SelectListItem,然后在View中的SelectList构造函数中指定Text和Value字段。