#c# #asp.net-mvc #razor
Вопрос:
У меня это SelectList
определено в моей модели просмотра:
public SelectList AccomodationTypesTypes()
{
return new SelectList(AccomodationTypes.Select(a => a.Type), "B");
}
AccomodationTypes.Select(a => a.Type)
в IENumerable<string>
настоящее время состоит из «А», «В» и «С».
Согласно https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.rendering.selectlist.-ctor вы можете указать второй параметр для указания выбранного значения — в моем случае жестко закодированное «B», — но это не работает.
Если это вам поможет, это фрагмент представления, в котором SelectList
:
<div class="form-group row">
<label asp-for="Accomodation.AccomodationTypeId" class="col-sm-2 col-form-label">Type</label>
<div class="col-sm-10"><select asp-for="Accomodation.AccomodationTypeId" asp-items="Model.AccomodationTypesTypes()"></select></div>
</div>
В представлении отображаются характеристики конкретного выбранного помещения. AccomodationTypeId-это внешний ключ класса AccomodationType, который обозначает более общие характеристики. В представлении пользователь может выбрать другой тип размещения для текущего размещения. Когда представление отображается на экране, я ожидаю, что будет выбран тип «B», которого в настоящее время нет. Как я могу этого добиться?
Комментарии:
1. У вас много ошибок в этом коде, вот почему он работает неправильно.
2. Хм, да, здесь много всего. Я думаю, что при использовании asp-for вам нужно установить
Accomodation.AccomodationTypeId
любое значение «B», которое должно быть в вашем выборе, но поскольку вы не устанавливаете значения для выбранного вами, это может быть сложно. Не могли бы вы попробовать добавить изображение вашего отрисованного html (так что не код cshtml)?3. @Serge Нет, я не согласен: мне нужно было изменить только одну строку, см. Мой ответ. И еще в мою защиту: в упомянутой мной статье Microsoft говорится, что в качестве второго параметра должно быть указано «SelectedValue». «B» идеально подходит в качестве значения, которое можно выбрать.
4. @Cooz Это будет работать, но это не лучший способ сделать это. Извините, но мне интересно, раз вы сами отвечаете на свои вопросы, почему вы публикуете эти вопросы?
5. @Serge Ну, я, конечно, не единственный, кто это делает — люди сами отвечают на свои вопросы по всему переполнению стека. Может быть, вспышка озарения? Наконец-то после поисков в течение дня нашли статью, которая дала такое представление? Веские причины для меня. Я новичок и все еще учусь, а ты, очевидно, намного дальше этого. Но тогда, каков наилучший способ сделать это, и что не так с тем, что я придумал?
Ответ №1:
Я разработал это, используя другую перегрузку списка выбора:
public SelectList AccomodationTypesTypes()
{
return new SelectList(AccomodationTypes, "Id", "Type");
}
"Id"
связывается с asp-for ( Accomodation.AccomodationTypeId
) в представлении, и соответствующий "Type"
отображается в списке выбора. Делает свое дело.
Я пошел в неправильном направлении, потому return new SelectList(AccomodationTypes.Select(a => a.Type))
что уже дал мне раскрывающийся список, который я хотел, и в соответствии со статьей Microsoft, которую я связал, мне нужно было только указать второй параметр для установления выбранного значения («Id», вероятно, вместо «B» 🙂).