@Html.DropDownListFor-如何附加额外的<;选项>;要列出

本文关键字:gt 选项 DropDownListFor- lt 何附加 @Html | 更新日期: 2023-09-27 17:57:58

我的视图中有以下内容:

@Html.DropDownListFor(m => m.Category, new SelectList(Model.categories, "Id", "Name", Model.Category), "All", new { @class = "form-control" })
<select name="Category" id="Category">
 <option value="">All</option>
 <option value="1">Debug</option>
 <option value="2" selected="selected">Error</option>
</select>

在我的回购中,我得到的价值如下:

    public IEnumerable<Category> GetCategories()
    {
        return _context.Category.ToList();
    }

如何给All一个值0而不是空字符串?

有没有办法把它附加到下面的回购方法中,因为我想保持我的控制器干净。

public IEnumerable<SelectListItem> GetCategoriesSelectList()
    {
        return _context.Category
             .Select(s => new SelectListItem
             {
                 Value = s.Id.ToString(),
                 Text = s.Name
             }).ToList();

    }

*更新*

我找到了以下助手,但不知道如何使用它:

 public static SelectList AddFirstItem(SelectList origList, SelectListItem firstItem)
    {
        List<SelectListItem> newList = origList.ToList();
        newList.Insert(0, firstItem);
        var selectedItem = newList.FirstOrDefault(item => item.Selected);
        var selectedItemValue = String.Empty;
        if (selectedItem != null)
        {
            selectedItemValue = selectedItem.Value;
        }
        return new SelectList(newList, "Value", "Text", selectedItemValue);
    }

在我看来,我有:

 @Html.DropDownListFor(m => m.Category, Helpers.AddFirstItem(new SelectList(Model.categories, "Id", "Name", Model.Category), "All"), null, new { @class = "form-control" })

我应该把什么作为第二个论点——上面的论点不起作用?

@Html.DropDownListFor-如何附加额外的<;选项>;要列出

在控制器中创建SelectList,该控制器包括带有Text = "All"Value = "0"SelectListItem,例如

IEnumerable<SelectListItem> categories = new List<SelectListItem>
{
    new SelectListItem() {Value = "0", Text = "All" }
}.Concat(GetCategories().Select(x => new SelectListItem
{
    Value = x.Id.ToString(),
    Text = x.Name
});

然后将其传递到视图,理想情况下是在视图模型属性中,但您可以使用ViewBag

ViewBag.CategoryList = categories;

并且在视图中

@Html.DropDownListFor(m => m.Category,(IEnumerable<SelectListItem>)ViewBag.CategoryList, new { @class = "form-control" })

请尝试以下操作:

public IEnumerable<SelectListItem> GetCategoriesSelectList()
{
    return _context.Category
         .Select(s => new SelectListItem
         {
             Value = s.Id.ToString(),
             Text = s.Name
         }).ToList().Add(new SelectListItem() { Text="all",Value="0" });

}