ASP MVC EF6 получает доступ к таблице внешних ключей в виде списка

#asp.net-mvc #entity-framework #razor

#asp.net-mvc #entity-framework #бритва

Вопрос:

У меня есть 2 таблицы, коды и страны, с ограничением внешнего ключа для codes.countryid на countries.id — Я использую базовый crud, заданный настройкой контроллера mvc из visual studio 15, но хотел бы заменить ввод текста на select для countryid, чтобы пользователь мог выбратьстрана из выпадающего списка соответствует вводу идентификатора в качестве int.

Как мне получить доступ к списку стран с помощью предоставленной модели? Пример кода razor ниже. Нужно ли мне получать список стран из другой модели?

 <div class="form-group">
            <label for="CountryId" class="control-label col-md-2">Country</label>
            <select name="CountryId" class="form-control" required>
                <option value="">Please select ...</option>
 /* Model.Countries is not available even after a foreignkey constraint? */
                @foreach(var i in Model.Countries)
                {
                    <option value="@i.id">@i.Name</option>
                }
            </select>
            @Html.ValidationMessageFor(model => model.CountryId, "", new { @class = "text-danger" })
            @Html.LabelFor(model => model.CountryId, htmlAttributes: new { @class = "control-label col-md-2" })
        </div>
  

Ответ №1:

Вы должны установить ViewBag переменную в действии контроллера со списком стран.

Предполагая, что у вас есть контекст БД внутри вашего контроллера, вы должны поместить следующий код в свое действие

 ViewBag.CountriesList = new SelectList(_context.countries.ToList(), "Id", "Name");
  

И используйте его, как показано ниже, в вашем представлении

  @Html.DropDownListFor(a => a.countryId, (SelectList)ViewBag.CountriesList , htmlAttributes: new { @class = "form-control" })