Как я могу добавить элемент в список выбора в ASP.net MVC
в основном я ищу, чтобы вставить элемент в начале списка выбора со значением по умолчанию 0 и текстовым значением " -- Select One --"
что-то вроде
SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);
можно ли это сделать?
12 ответов:
там действительно нет необходимости делать это, если вы не настаиваете на значении 0. Расширение HtmlHelper DropDownList позволяет задать метку опции, которая отображается в качестве начального значения в select с нулевым значением. Просто используйте одну из подписей DropDownList, которая имеет метку option.
<%= Html.DropDownList( "DropDownValue", (IEnumerable<SelectListItem>)ViewData["Menu"], "-- Select One --" ) %>
Я получил эту работу путем заполнения SelectListItem, преобразования в список и добавления значения в индекс 0.
List<SelectListItem> items = new SelectList(CurrentViewSetups, "SetupId", "SetupName", setupid).ToList(); items.Insert(0, (new SelectListItem { Text = "[None]", Value = "0" })); ViewData["SetupsSelectList"] = items;
это возможно.
//Create the select list item you want to add SelectListItem selListItem = new SelectListItem() { Value = "null", Text = "Select One" }; //Create a list of select list items - this will be returned as your select list List<SelectListItem> newList = new List<SelectListItem>(); //Add select list item to list of selectlistitems newList.Add(selListItem); //Return the list of selectlistitems as a selectlist return new SelectList(newList, "Value", "Text", null);
мне понравился ответ @AshOoO, но, как и @Rajan Rawal, мне нужно было сохранить состояние выбранного элемента, если таковое имеется. Поэтому я добавил свою настройку к его методу
AddFirstItem()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); }
private SelectList AddFirstItem(SelectList list) { List<SelectListItem> _list = list.ToList(); _list.Insert(0, new SelectListItem() { Value = "-1", Text = "This Is First Item" }); return new SelectList((IEnumerable<SelectListItem>)_list, "Value", "Text"); }Это должно сделать то ,что вам нужно, просто отправьте свой список выбора, и он вернет список выбора с элементом в индексе 0
вы можете custome текст, значение или даже индекс элемента, который нужно вставить
The .Список().Вставлять.(.) метод добавляет элемент в список. Можно указать любую позицию. После ToList просто добавьте .Вставить(0, "- - Первый Пункт - -")
код
SelectList list = new SelectList(repository.func.ToList()); ListItem li = new ListItem(value, value); list.items.add(li);Новый Код
SelectList list = new SelectList(repository.func.ToList().Insert(0, "- - First Item - -")); ListItem li = new ListItem(value, value); list.items.add(li);
вот html помощник для вас
public static SelectList IndividualNamesOrAll(this SelectList Object) { MedicalVarianceViewsDataContext LinqCtx = new MedicalVarianceViewsDataContext(); //not correct need individual view! var IndividualsListBoxRaw = ( from x in LinqCtx.ViewIndividualsNames orderby x.FullName select x); List<SelectListItem> items = new SelectList ( IndividualsListBoxRaw, "First_Hospital_Case_Nbr", "FullName" ).ToList(); items.Insert(0, (new SelectListItem { Text = "All Individuals", Value = "0.0", Selected = true })); Object = new SelectList (items,"Value","Text"); return Object; }
может звучит не очень элегантно, но я обычно делаю что-то вроде этого:
var items = repository.func.ToList(); items.Insert(0, new funcItem { ID = 0, TextValue = "[None]" }); ViewBag.MyData = new SelectList(items);
ладно, мне нравится чистый код, поэтому я сделал этот метод расширения
static public class SelectListHelper { static public SelectList Add(this SelectList list, string text, string value = "", ListPosition listPosition = ListPosition.First) { if (string.IsNullOrEmpty(value)) { value = text; } var listItems = list.ToList(); var lp = (int)listPosition; switch (lp) { case -1: lp = list.Count(); break; case -2: lp = list.Count() / 2; break; case -3: var random = new Random(); lp = random.Next(0, list.Count()); break; } listItems.Insert(lp, new SelectListItem { Value = value, Text = text }); list = new SelectList(listItems, "Value", "Text"); return list; } public enum ListPosition { First = 0, Last = -1, Middle = -2, Random = -3 } }использования (на примере):
var model = new VmRoutePicker { Routes = new SelectList(_dataSource.Routes.Select(r => r.RouteID).Distinct()) }; model.Routes = model.Routes.Add("All", "All", SelectListHelper.ListPosition.Random); //or model.Routes = model.Routes.Add("All");
Так как этот вариант может понадобиться во многих разных манерах, я пришел к выводу, чтобы разработать объект, чтобы его можно было использовать в разных сценариях и в будущих проектах
сначала добавьте этот класс в свой проект
public class SelectListDefaults { private IList<SelectListItem> getDefaultItems = new List<SelectListItem>(); public SelectListDefaults() { this.AddDefaultItem("(All)", "-1"); } public SelectListDefaults(string text, string value) { this.AddDefaultItem(text, value); } public IList<SelectListItem> GetDefaultItems { get { return getDefaultItems; } } public void AddDefaultItem(string text, string value) { getDefaultItems.Add(new SelectListItem() { Text = text, Value = value }); } }Теперь в действии контроллера вы можете сделать так
// Now you can do like this ViewBag.MainCategories = new SelectListDefaults().GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1")); // Or can change it by such a simple way ViewBag.MainCategories = new SelectListDefaults("Any","0").GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "0")); // And even can add more options SelectListDefaults listDefaults = new SelectListDefaults(); listDefaults.AddDefaultItme("(Top 5)", "-5"); // If Top 5 selected by user, you may need to do something here with db.MainCategories, or pass in parameter to method ViewBag.MainCategories = listDefaults.GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));и, наконец, в поле зрения вы будете кодировать так.
@Html.DropDownList("DropDownListMainCategory", (IEnumerable<SelectListItem>)ViewBag.MainCategories, new { @class = "form-control", onchange = "this.form.submit();" })
обходной путь-использовать ответ @tvanfosson (выбранный ответ) и использовать JQuery (или Javascript), чтобы установить значение параметра в 0:
$(document).ready(function () { $('#DropDownListId option:first').val('0'); });надеюсь, что это помогает.
Я не знаю, если у кого-то еще есть лучший вариант...
<% if (Model.VariableName == "" || Model.VariableName== null) { %> <%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], "", new{stlye=" "})%> <% } else{ %> <%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], Model.VariableName, new{stlye=" "})%> <% }>
Comments