簡體   English   中英

如何設置整數列表中選擇元素的值和文本值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM