Я использую вспомогательный метод DropDownListFor внутри страницы редактирования, и мне не удалось заставить его выбрать указанное мной значение. Я заметил аналогичный вопрос по Stackoverflow. Предлагаемый обходной путь заключался в том, чтобы «заполнить список SelectList в коде представления». Проблема в том, что я уже пробовал это, но до сих пор не работает.
<%= Html.DropDownListFor(model => model.States, new SelectList(Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%>
Я установил точку останова и проверил существование (и действительность) model.AddressStateAbbr. Я просто не уверен, что мне не хватает.
источник
@Html.DropDownListFor(model => model.Title, (SelectList)ViewBag.Salutation, Resources.Labels.Unknown )
Пытаться:
<%= Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%>
или в синтаксисе Razor:
@Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")
Помощники на основе выражений, похоже, не соблюдают свойство Selected элемента SelectListItems в вашем списке SelectList.
источник
Если вы делаете это правильно и используете модель - в отличие от всех этих чудаков с ViewBag - и все еще видите проблему, это потому, что
@Html.DropDownListFor(m => m.MyValue, @Model.MyOptions)
вы не можете соответствоватьMyValue
выбору, в котором она естьMyOptions
. Для этого есть две возможные причины:MyValue
нулевой. Вы не установили его в своей ViewModel. Сделать один изMyOptions
нихSelected=true
не решит.MyValue
отличается от типов вMyOptions
. Так что вроде, еслиMyValue
есть(int) 1
, но у васMyOptions
список строк с дополнениями{"01", "02", "03", ...}
, он, очевидно, ничего не выберет.источник
<option value="2">some text</option>
. Похоже, что на самом деле он пытается сопоставить свойство модели представления с отображаемым текстом, а не атрибутом значения, чтобы выбрать выбранный параметр. Это заставляло меня какое-то время.Не отвечая на этот вопрос - это может помочь будущим гуглерам, если они последуют моему пути мысли:
Я хотел множественный выбор, и этот хак атрибутов в DropDownListFor не выбирал автоматически
Html.DropDownListFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems, new {multiple= "multiple" })
вместо этого я должен был использовать ListBoxFor, который заставил все работать
Html.ListBoxFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems)
источник
У меня тоже есть аналогичная проблема, и я решаю ее следующим образом: установите
model.States на вашем контроллере на то, что вам нужно выбрать
model.States = "Калифорния"
и тогда вы получите значение по умолчанию «Калифорния».
источник
эта проблема распространена. измените имя свойства viewbag на другое, чем имя переменной модели, используемой на странице.
источник
Еще одна вещь, которую нужно проверить, это не весь ваш собственный код, - это убедиться, что функция javascript не меняет значение при загрузке страницы. После нескольких часов, когда я бился головой о стену, читая все эти решения, я обнаружил, что именно это и происходит со мной.
источник
Я столкнулся с этой проблемой недавно. Это сводило меня с ума около часа. В моем случае я не использовал
ViewBag
переменную с тем же именем, что и у свойства модели.После отслеживания изменений системы управления версиями проблема оказалась в том, что у моего действия был аргумент с тем же именем, что и свойство модели:
public ActionResult SomeAction(string someName) { var model = new SomeModel(); model.SomeNames = GetSomeList(); //Notice how the model property name matches the action name model.someName = someName; }
В представлении:
@Html.DropDownListFor(model => model.someName, Model.SomeNames)
Я просто изменил аргумент действия на другое имя, и он снова заработал:
public ActionResult SomeAction(string someOtherName) { //.... }
Я полагаю, что можно также изменить имя свойства модели, но в моем случае имя аргумента бессмысленно, поэтому ...
Надеюсь, этот ответ избавит кого-то от неприятностей.
источник
По крайней мере, для меня проблема была связана с
IEnumerable<T>
.По сути, произошло то, что представление и модель не имели одинаковых ссылок на одно и то же свойство.
Если ты сделаешь это
IEnumerable<CoolName> CoolNames {get;set;} = GetData().Select(x => new CoolName{...});}
Затем свяжите это, используя
@Html.DropDownListFor(model => model.Id, Model.CoolNames)
View теряет свойство CoolNames, простое исправление - просто добавить
.ToList()
After dooing a projection (.Select()
);).источник
У меня такая же проблема. В приведенном ниже примере переменная ViewData ["DATA_ACREDITO_MODELO_INTEGRADO"] имеет список SelectListItem со значением, выбранным по умолчанию, но такой атрибут не отображается визуально.
// data var p_estadoAcreditacion = "NO"; var estadoAcreditacion = new List<SelectListItem>(); estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)" , Value = " " }); estadoAcreditacion.Add(new SelectListItem { Text = "SI" , Value = "SI" }); estadoAcreditacion.Add(new SelectListItem { Text = "NO" , Value = "NO" }); if (!string.IsNullOrEmpty(p_estadoAcreditacion)) { estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true; } ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;
Я решил это, сделав первый аргумент DropdownList отличным от атрибута id.
// error: @Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO" , ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem> , new { id = "SELECT__ACREDITO_MODELO_INTEGRADO" ... // solved : @Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO" , ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem> , new { id = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
источник
Я знаю, что это старый вопрос, но у меня была такая же проблема в 2020 году.
Оказывается, проблема заключалась в том, что свойство модели называлось «Title», я переименовал его в «GivenTitle», и теперь оно работает должным образом.
Из
Html.DropDownListFor(m => m.Title, Model.Titles, "Please Select", new { @class = "form-control" })
к
Html.DropDownListFor(m => m.GivenTitle, Model.GivenTitles, "Please Select", new { @class = "form-control" })
источник