@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" })
我应该把什么作为第二个论点——上面的论点不起作用?
在控制器中创建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" });
}