Раскрывающийся список MVC Core SelectList в ошибке контроллера «Microsoft.AspNetCore.Mvc.Rendering.SelectListItem» - PullRequest
0 голосов
/ 25 мая 2018

Я хочу создать раскрывающийся список SelectList в MVC.

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

Я получаю сообщение об ошибке с этим «Microsoft.AspNetCore.Mvc.Rendering.SelectListItem» Этот ресурс пока не помогает: Почему я получаю «Система».Web.Mvc.SelectListItem "в моем DropDownList?

Я читаю много примеров в Интернете. Это оригинальный код,

Оригинальный код:

ViewData["ProductTypeId"] = new SelectList(_context.ProductType, "ProductName", "ProductDescription");

Я пытаюсь заставить код работать так:

Ошибка получения: "Microsoft.AspNetCore.Mvc.Rendering.SelectListItem"

 ViewData["ProductTypeId"] = new SelectList(_producttyperepository.GetAllLookupKey());

    public IEnumerable<SelectListItem> GetAllLookupKey()
    {

       return  (from ptin _context.ProductType pt
                       select new SelectListItem
                       {
                           Value = pt.ProductTypeName,
                           Text = pt.ProductDescription
                       });

    }

        <div class="form-group">
            <label asp-for="ProductType" class="control-label"></label>
            <select asp-for="ProductType" class="form-control" asp-items="ViewBag.ProductTypeId"></select>
            <span asp-validation-for="ProductType" class="text-danger"></span>
        </div>

1 Ответ

0 голосов
/ 25 мая 2018

Ваш текущий GetAllLookupKey не будет компилироваться!Используйте эту версию.

public IEnumerable<SelectListItem> GetAllLookupKey()
{
    return _context.ProductType.Select( pt=>new SelectListItem
    {
        Value = pt.ProductTypeName,
        Text = pt.ProductDescription
    }).ToList();
}

Также нет необходимости создавать вторую SelectList.Ваш метод GetAllLookupKey возвращает коллекцию SelectListItem, и вы можете установить это в свои ViewData.

 ViewData["ProductTypeId"] = _producttyperepository.GetAllLookupKey();

Класс SelectListItem определен в пространстве имен Microsoft.AspNetCore.Mvc.Rendering; Поэтому убедитесь, что вы используетезаявление, которое включает в себя это пространство имен в вашем классе.

using Microsoft.AspNetCore.Mvc.Rendering;

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

Хотя это может решить нашу проблему, SelectListItem - это класс, представляющий большую часть проблемы уровня пользовательского интерфейса. ИМХО , вам не нужно, чтобы ваш репозиторий возвращал это.Пусть ваш репозиторий вернет более общие данные (например, список ProductType), а код уровня UI (действие контроллера / уровень обслуживания UI и т. Д.) Создаст список объектов SelectListItem из этого списка ProductType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...