如何设置下拉列表的值和文本值,同时将其绑定到视图模型?
我有一个从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))
答案 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字段。