ich folgendes in meiner Sicht haben:@ Html.DropDownListFor - Wie zusätzliche <option> anhängen zur Liste
@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>
In meinem Repo ich die Werte erhalten, wie folgt:
public IEnumerable<Category> GetCategories()
{
return _context.Category.ToList();
}
Wie kann ich Geben Sie All
einen Wert von 0 anstelle von leeren Zeichenfolge?
Gibt es eine Möglichkeit, es an meine Repomethode unten anzuhängen, wie ich meinen Controller sauber halten möchte.
public IEnumerable<SelectListItem> GetCategoriesSelectList()
{
return _context.Category
.Select(s => new SelectListItem
{
Value = s.Id.ToString(),
Text = s.Name
}).ToList();
}
* UPDATE *
ich folgende Helfer gefunden habe, aber kann nicht herausfinden, wie es zu benutzen:
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);
}
Aus meiner Sicht habe ich:
@Html.DropDownListFor(m => m.Category, Helpers.AddFirstItem(new SelectList(Model.categories, "Id", "Name", Model.Category), "All"), null, new { @class = "form-control" })
Was gebe ich als zweites Argument - das obige funktioniert nicht?
Erstellen Sie Ihr 'IEnumerable' in der Steuerung und fügen Sie ein neues 'SelectListItem' mit' Text = "All" 'und' Wert = "0" ', um es –
@ozzii Wenn Sie kein Problem mit der Datenbankintegrität, Fremdschlüsselverstößen und allem haben möchten, schlage ich vor, dass Sie die benötigten Optionen direkt in die Datenbank einfügen. –