Jak mogę ustawić wybraną wartość Html.DropDownListFor? Rozejrzałem się po Internecie i zauważyłem, że można to osiągnąć za pomocą czwartego parametru, tak jak poniżej:
@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0), "Please select a country")
Moja lista wyboru zostanie wyświetlona w następujący sposób:
<select id="ShipFromCountries" name="ShipFromCountries">
<option value="">Please select a country</option>
<option value="GB">United Kingdom</option>
<option value="US">United States</option>
...
</select>
Ale z jakiegoś powodu Wielka Brytania pozostaje wybrana, ale chcę, aby zostało wybrane "Proszę wybrać kraj".
Czy ktoś wie, jak mogę to osiągnąć?
EDYTOWAĆ
Zaktualizowałem mój kod, ponieważ nastąpiła niewielka zmiana w funkcjonalności, ale nadal wydaje się, że napotyka ten problem. Oto, co moim zdaniem:
@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
1
to identyfikator tego, option
który chcę wybrać, próbowałem też z tekstem, option
ale to też nie działa.
Jakieś pomysły?
źródło
OrderTemplates
próbą powiązania zViewBag
właściwością typuIEnumerabe<SelectListItem>
. Ale<select>
element nie może być powiązany z kolekcją złożonych obiektów (tylko typ wartości)U mnie nie działało, więc działało w ten sposób:
Kontroler:
int selectedId = 1; ViewBag.ItemsSelect = new SelectList(db.Items, "ItemId", "ItemName",selectedId);
Widok:
@Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect)
JQuery:
$("document").ready(function () { $('#ItemId').val('@Model.ItemId'); });
źródło
Kiedy mijasz taki obiekt:
new SelectList(Model, "Code", "Name", 0)
mówisz: źródło (
Model
) i klucz ("Code"
) tekst ("Name"
) i wybrana wartość0
. Prawdopodobnie nie masz0
w źródle wartościCode
właściwości, więc pomocnik HTML wybierze pierwszy element do przekazania rzeczywistej selectedValue do tej kontrolki.źródło
Przed przypisaniem upewnij się, że wybrana wartość została przycięta.
//Model
public class SelectType { public string Text { get; set; } public string Value { get; set; } }
//Kontroler
var types = new List<SelectType>(); types.Add(new SelectType() { Value = 0, Text = "Select a Type" }); types.Add(new SelectType() { Value = 1, Text = "Family Trust" }); types.Add(new SelectType() { Value = 2, Text = "Unit Trust"}); ViewBag.PartialTypes = types;
//Widok
@Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" })
źródło
Jeśli wiesz, co będzie w widoku, możesz również ustawić wartość domyślną z Kontrolera, a następnie ustawić ją w pliku view / cshtml. Nie ma potrzeby ustawiania wartości domyślnej od strony HTML.
W pliku kontrolera.
commission.TypeofCommission = 1; return View(commission);
W pliku .cshtml.
@Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--")
źródło
Powinieneś zapomnieć o klasie
Użyj tego w swoim kontrolerze:
var customerTypes = new[] { new SelectListItem(){Value = "all", Text= "All"}, new SelectListItem(){Value = "business", Text= "Business"}, new SelectListItem(){Value = "private", Text= "Private"}, };
Wybierz wartość:
var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private"); if (selectedCustomerType != null) selectedCustomerType.Selected = true;
Dodaj listę do ViewData:
ViewBag.CustomerTypes = customerTypes;
Użyj tego w swoim widoku:
@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)
-
Więcej informacji: http://www.asp.net/mvc/overview/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc
źródło
Dodaj sekcję kontrolera
ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);
Dodaj sekcję HTML
@Html.DropDownList("Orders", null)
Prosta metoda
źródło
U mnie ogólne rozwiązanie :)
@{ var selectedCity = Model.Cities.Where(k => k.Id == Model.Addres.CityId).FirstOrDefault(); if (selectedCity != null) { @Html.DropDownListFor(model => model.Addres.CityId, new SelectList(Model.Cities, "Id", "Name", selectedCity.Id), new { @class = "form-control" }) } else { @Html.DropDownListFor(model => model.Cities, new SelectList(Model.Cities, "Id", "Name", "1"), new { @class = "form-control" }) } }
źródło
Linq to Dropdown z pustą pozycją, wybraną pozycją (działa w 100%)
(Silnie wpisana, minimalne szanse na błąd) Wszelkie zmiany modelu zostaną odzwierciedlone w powiązaniu
Kontroler
public ActionResult ManageSurveyGroup() { tbl_Survey sur = new tbl_Survey(); sur.Survey_Est = "3"; return View(sur); }
Widok
@{ //Step One : Getting all the list var CompEstdList = (from ComType in db.tbl_CompEstdt orderby ComType.Comp_EstdYr select ComType).ToList(); //Step Two : Adding a no Value item ** CompEstdList.Insert(0, new eDurar.Models.tbl_CompEstdt { Comp_Estdid = 0, Comp_EstdYr = "--Select Company Type--" }); //Step Three : Setting selected Value if value is present var selListEstd= CompEstdList.Select(s => new SelectListItem { Text = s.Comp_EstdYr, Value = s.Comp_Estdid.ToString() }); } @Html.DropDownListFor(model => model.Survey_Est, selListEstd) @Html.ValidationMessageFor(model => model.Survey_Est)
Ta metoda wiązania danych jest również możliwa
var selList = CompTypeList.Select(s => new SelectListItem { Text = s.CompTyp_Name, Value = s.CompTyp_Id.ToString(), Selected = s.CompTyp_Id == 3 ? true : false });
źródło
Wiem, że tak naprawdę nie jest to odpowiedź na pytanie, ale szukałem sposobu na zainicjowanie DropDownList z listy w locie w widoku, gdy natknąłem się na ten post.
Mój błąd polegał na tym, że próbowałem utworzyć SelectList ze słownika w następujący sposób:
//wrong! @Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary<string, string>() { { Model.Locality, Model.Locality_text } }, Model.Locality, ...
Następnie poszukałem oficjalnego dokumentu msdn i stwierdziłem, że
DropDownListFor
niekoniecznie wymaga toSelectList
, ale raczejIEnumerable<SelectListItem>
://right @Html.DropDownListFor(m => m.Locality, new List<SelectListItem>() { new SelectListItem() { Value = Model.Locality, Text = Model.Locality_text, Selected = true } }, Model.Locality, new { @class = "form-control select2ddl" })
W moim przypadku prawdopodobnie mogę również pominąć
Model.Locality
jako wybraną pozycję, ponieważ jest to a) jedyna pozycja ib) już jest napisana weSelectListItem.Selected
właściwości.Na wszelki wypadek, gdy się zastanawiasz, źródłem danych jest strona AJAX, która jest ładowana dynamicznie za pomocą kontrolki SelectWoo / Select2.
źródło
public byte UserType public string SelectUserType
Musisz zdobyć jeden i ustawić inny. Wybrana wartość nie może być tą samą pozycją, którą zamierzasz ustawić.
@Html.DropDownListFor(p => p.SelectUserType, new SelectList(~~UserTypeNames, "Key", "Value",UserType))
Używam słownika Enum do mojej listy, dlatego jest para „klucz” i „wartość”.
źródło
Miałem podobny problem, używałem ViewBag i nazwy elementu tak samo. (Błąd pisowni)
źródło
To są kwestie CSS. Nie wiem, dlaczego @ Html.DropDownListFor w Bootstrap 4 działa. Z pewnością jest to problem z projektowaniem klasowym. W każdym razie praca jest taka, jeśli twoje pole wprowadzania rozwijanego ma dopełnienie CSS: #px, # px; element, a następnie wyłącz go. Mam nadzieję, że to zadziała.
źródło