Формат html.DropdownListFor выбранное значение не задано
как я могу установить выбранное значение Html.DropDownListFor? Я смотрел онлайн и видел, что оно может быть достигнуто с помощью четвертого параметра так, как показано ниже:
@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0), "Please select a country")
мой список выбора затем отображается следующим образом:
<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>
но по какой-то причине Великобритания остается выбранной, но я хочу, чтобы "Пожалуйста, выберите страну", чтобы быть выбранным.
кто-нибудь знает как я могу достичь этого?
EDIT
я обновил мой код, как было небольшое изменение в функциональности, однако до сих пор, кажется, сталкиваются с этой проблемой. Вот что на мой взгляд:
@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
1 - это идентификатор option что я хочу выбрать, я также пробовал с текстом option но это тоже не работает.
какие идеи?
11 ответов:
ваш код имеет некоторые концептуальные вопросы:
первый,
@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")при использовании DropDownListFor первым параметром является свойство, в котором хранится выбранное значение после отправки формы. Так что, в вашем случае, вы должны иметь
SelectedOrderIdв рамках вашей модели или что-то подобное, чтобы использовать его таким образом:@Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")второй,
Помимо использования ViewBag, это не так, но есть лучшие способы (поместите эту информацию в ViewModel вместо этого),существует "маленькая ошибка" (или незамеченное поведение), когда ваше свойство ViewBag, где вы держите SelectList, является тем же именем свойства, в которое вы помещаете выбранное значение. Чтобы избежать этого, просто используйте другое имя при именовании свойства, содержащего список элементов.
некоторый код, который я бы использовал, если бы я был на вашем месте, чтобы избежать этих проблем и написать лучше MVC код:
Viewmodel:
public class MyViewModel{ public int SelectedOrderId {get; set;} public SelectList OrderTemplates {get; set;} // Other properties you need in your view }
для меня не работал так работал так:
:int selectedId = 1; ViewBag.ItemsSelect = new SelectList(db.Items), "ItemId", "ItemName",selectedId);View:
@Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect)JQuery:
$("document").ready(function () { $('#ItemId').val('@Model.ItemId'); });
когда вы передаете такой объект:
new SelectList(Model, "Code", "Name", 0)вы говорите, источник (
Model) и ключевых ("Code") текста ("Name") и выбранное значение0. Вероятно, у вас нет0значение на ваш источникCodeсвойство, таким образом, помощник html будет выбран первый элемент. Чтобы передать реальное selectedValue к этому элементу управления.
убедитесь, что вы обрезали выбранное значение перед назначением.
//модель
public class SelectType { public string Text { get; set; } public string Value { get; set; } }//контроллер
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;/ / View
@Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" })
Если вы знаете, что будет в представлении, вы также можете установить значение по умолчанию из контроллера, а затем настроить его в файл view/cshtml. нет необходимости устанавливать значение по умолчанию со стороны HTML.
в файле контроллера.
commission.TypeofCommission = 1; return View(commission);In the .cshtml файл.
@Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--")
вы должны забыть класс
SelectList
используйте это в вашем :
var customerTypes = new[] { new SelectListItem(){Value = "all", Text= "All"}, new SelectListItem(){Value = "business", Text= "Business"}, new SelectListItem(){Value = "private", Text= "Private"}, };выберите значение:
var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private"); if (selectedCustomerType != null) selectedCustomerType.Selected = true;добавить список в ViewData:
ViewBag.CustomerTypes = customerTypes;используйте это в вашем View:
@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)-
добавить раздел контроллера
ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);добавить раздел Html
@Html.DropDownList("Orders", null)простой способ
для меня общее решение :)
@{ 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" }) } }
Linq для выпадающего списка с пустым элементом, выбранный элемент (работает 100%)
(Строго типизировано, шансы на ошибку минимальны) любые изменения модели будут отражены в привязкеконтроллер
public ActionResult ManageSurveyGroup() { tbl_Survey sur = new tbl_Survey(); sur.Survey_Est = "3"; return View(sur); }посмотреть
@{ //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)этот метод привязки данных также возможен
var selList = CompTypeList.Select(s => new SelectListItem { Text = s.CompTyp_Name, Value = s.CompTyp_Id.ToString(), Selected = s.CompTyp_Id == 3 ? true : false });
Я знаю, что это не совсем ответ на вопрос, но я искал способ инициализировать выпадающий список из списка на лету в представлении, когда я продолжал натыкаться на этот пост.
моя ошибка заключалась в том, что я попытался создать список выбора из словаря следующим образом:
//wrong! @Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary<string, string>() { { Model.Locality, Model.Locality_text } }, Model.Locality, ...Я тогда пошел копаться в чиновнике msdn doc, и установлено, что
DropDownListForне требуетсяSelectList, аIEnumerable<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" })в моем случае я, вероятно, также могу опустить
Model.Localityкак выбранный элемент, так как его а) единственный элемент и б) он уже говорит это вSelectListItem.Selectedсобственность.на всякий случай, если вам интересно, источником данных является страница AJAX, которая динамически загружается с помощью элемента управления SelectWoo/Select2.
public byte UserType public string SelectUserTypeвам нужно получить один и установить другой. Выбранное значение не может быть тем же самым элементом, который вы собираетесь установить.
@Html.DropDownListFor(p => p.SelectUserType, new SelectList(~~UserTypeNames, "Key", "Value",UserType))Я использую Enum словарь для моего списка, поэтому есть "ключ", "значение" пара.
Comments