Html.DropdownListДля выбранного значения не задано

Как установить выбранное значение Html.DropDownListFor? Я смотрю онлайн и вижу, что это может быть достигнуто с помощью четвертого параметра, как показано ниже:

@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0), "Please select a country") 

Затем мой список выбора отображается следующим образом:

  Please select a country United Kingdom United States ...  

Но по какой-то причине Соединенное Королевство остается избранным, но я хочу, чтобы «выберите страну», которую нужно выбрать.

Кто-нибудь знает, как я могу это достичь?

РЕДАКТИРОВАТЬ

Я обновил свой код, так как было небольшое изменение в функциональности, но все же похоже, что это связано с этой проблемой. Это то, что, на мой взгляд,

 @Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template") 

1 – это идентификатор option которую я хочу выбрать, я также попытался с текстом option но это также не работает.

Есть идеи?

11 Solutions collect form web for “Html.DropdownListДля выбранного значения не задано”

У вашего кода есть некоторые концептуальные проблемы:

Во-первых ,

 @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 } 

controller:

 public ActionResult MyAction(){ var model = new MyViewModel(); model.OrderTemplates = new SelectList(db.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1); //Other initialization code return View(model); } 

В вашем представлении:

 @Html.DropDownListFor(n => n.SelectedOrderId, Model.OrderTemplates, "Please select an order template") 

Для меня работа не работала так:

controller:

 int selectedId = 1; ViewBag.ItemsSelect = new SelectList(db.Items), "ItemId", "ItemName",selectedId); 

Посмотреть:

 @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; } } 

// controller

 var types = new List(); 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; 

//Посмотреть

 @Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" }) 

Если вы знаете, что будет в представлении, вы также можете установить значение по умолчанию из Controller, а затем настроить его в файл view / cshtml. Не нужно устанавливать значение по умолчанию со стороны HTML.

В файле Controller.

 commission.TypeofCommission = 1; return View(commission); 

В файле .cshtml.

 @Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--") 

Вы должны забыть class

SelectList

Используйте это в своем controllerе:

 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; 

Используйте это в своем представлении:

 @Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes) 

Дополнительная информация: http://www.asp.net/mvc/overview/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc

Добавить секцию controllerа

  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 to Dropdown с пустым элементом, выбранным элементом (работает 100%)
(Сильно типизировано, вероятность минимальной ошибки) Любые изменения модели будут отражены в привязке

controller

 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 }); 

Я знаю, что это не ответ на вопрос, но я искал способ инициализировать DropDownList из списка на лету в представлении, когда я продолжал спотыкаться об этом сообщении.

Моя ошибка заключалась в том, что я попытался создать SelectList из словаря следующим образом:

 //wrong! @Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary() { { Model.Locality, Model.Locality_text } }, Model.Locality, ... 

Затем я начал копаться в официальном документе SelectList и обнаружил, что DropDownListFor необязательно требует SelectList , а скорее IEnumerable :

 //right @Html.DropDownListFor(m => m.Locality, new List() { new SelectListItem() { Value = Model.Locality, Text = Model.Locality_text, Selected = true } }, Model.Locality, new { @class = "form-control select2ddl" }) 

В моем случае я, возможно, также могу опустить Model.Locality как выбранный элемент, поскольку его а) единственный элемент и b) он уже говорит об этом в свойстве SelectListItem.Selected .

На всякий случай вам интересно, источник данных – это страница AJAX, которая динамически загружается с помощью элемента управления SelectWoo / Select2.

 public byte UserType public string SelectUserType 

Вам нужно получить один и установить другой. Выбранное значение не может быть тем же самым элементом, который вы собираетесь установить.

 @Html.DropDownListFor(p => p.SelectUserType, new SelectList(~~UserTypeNames, "Key", "Value",UserType)) 

Я использую словарь Enum для своего списка, поэтому есть пара «ключ», «значение».

  • MVC, кнопка отправки которого нажата
  • EditorTemplate для DropDownList
  • Поместить таблицу HTML в ADO.NET DataTable
  • MVC 3: Как визуализировать представление без его страницы макета при загрузке через ajax?
  • Выполнение проверки на стороне клиента для пользовательского атрибута
  • ASP.NET MVC Razor: как визуализировать HTML-код Razor Partial View внутри действия controllerа
  • MVC Тип данных Валютная триггерная цифровая клавиатура
  • Как сделать частичный элемент формы с помощью AJAX
  • ASP.NET MVC 3: переопределить атрибут «name» с помощью TextBoxFor
  • Weird Error Обновление ASP.NET MVC с 4 до 5
  • MVC Razor видит, что Intellisense сломан в VS 2013/2015/2017
  • Interesting Posts
    Давайте будем гением компьютера.