MVC视图中的下拉列表

时间:2019-07-31 16:22:38

标签: asp.net-mvc asp.net-core

我正在尝试创建一个下拉列表,但除了“请选择一个”之外没有任何值,但下拉菜单中什么也没有。

到目前为止,我已经尝试过:

查看:

<select asp-for="StatusToEdit.Color.Name" asp-items="Model.AvailableColors">
     <option>Please select one</option>
</select>

型号:

   public SelectList AvailableColors { get; set; }
    public void OnGet()
    {
        AvailableColors = new SelectList(nameof(StatusColor.ColorId), 
        nameof(StatusColor.Name));
    }

模拟列表:

    private static List<ItemStatus> _mockStatuses = new List<ItemStatus>
    {
        new ItemStatus  { StatusId = 1, Name = "Complete", Color = new 
         StatusColor{ ColorId = 1, Name = "Auto" } },
        new ItemStatus  { StatusId = 2, Name = "Complete, Ongoing", Color =  
        new StatusColor{ ColorId = 2, Name = "Green" }},
        new ItemStatus  { StatusId = 3, Name = "In Process", Color = new 
        StatusColor{ ColorId = 3, Name = "Yellow" }}
    };

我希望下拉菜单中会显示所有颜色。

2 个答案:

答案 0 :(得分:1)

如果您使用的是asp.net核心MVC(Razor Pages相似),则需要将模型属性类型修改为IEnumerable<SelectListItem> AvailableColorsList<SelectListItem> AvailableColors

1.Model

public class ManageStatusesEditViewModel
{
    //other properties
    public List<SelectListItem> AvailableColors { get; set; }
}

2。动作:

[HttpGet]
public IActionResult ManageStatusesEdit(int id)
    {
        //other logic
        var dropdownData = new List<SelectListItem>();

        _mockStatuses.ForEach(d => dropdownData.Add(new SelectListItem()
        {
            Value = d.Color.Name,
            Text = d.Color.Name
        }));

        var editManageStatusesEditViewModel = new ManageStatusesEditViewModel
        {

            AvailableColors = dropdownData
        };
        return View(editManageStatusesEditViewModel);
    }

3。视图:

<select asp-for="StatusToEdit.Color.Name" asp-items="Model.AvailableColors">
    <option>Please select one</option>
</select>

4。结果:

enter image description here

答案 1 :(得分:0)

您应按以下步骤创建列表:

ViewBag.ColorList = new SelectList(_mockStatuses.Select(d=> { return new SelectListItem { Text = d.Color.Name, Value = d.Color.ColorId.ToString() }; }),"Value","Text");

我使用了ViewBag,但是如果愿意,您显然可以通过ViewModel将其传递到视图中。

对于您的视图,您应该执行以下操作:

<select asp-items="@ViewBag.ColorList" asp-for="StatusToEdit.Color.Name" >
    <option value="">Please select one</option>
</select>

请确保创建时在SelectList的末尾添加了Value和Text。