Заполнить список выбора бритвы из базы данных - PullRequest
0 голосов
/ 14 июня 2019

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

код в моем классе cshtml.cs

        public DutyWeb_DEVContext db;
        public AddApplicationModel(DutyWeb_DEVContext db) => this.db = db;
        public List<SelectListItem> ministryItems {get;set;}

        public void OnGet()
        {
            ministryItems = db.Ministry.Select(x=>new SelectListItem{Value=x.Name,Text=x.Name}).ToList();
            Console.WriteLine("------------"+ministryItems.Count);
        }

код в классе cshtml

            <input type="text" name="appName" placeholder="Enter Application Name">
            <select asp-items="Model.ministryItems">
                <option>Select Ministry</option>
            </select>

Я получаю сообщение об ошибке

Pages \ AddApplication.cshtml (14,63): ошибка CS0266: невозможно неявное преобразование типа «System.Collections.Generic.List» в «System.Collections.Generic.IEnumerable». Существует явное преобразование (вам не хватает приведения?)

Класс служения

public partial class Ministry
{
    public Ministry()
    {
        Application = new HashSet<Application>();
    }

    public int MinistryId { get; set; }
    public string Name { get; set; }
    public string ShortName { get; set; }
    public int? Corguid { get; set; }

    public ICollection<Application> Application { get; set; }
}

Ответы [ 2 ]

1 голос
/ 14 июня 2019

вы используете System.Web.Mvc и Microsoft.AspNetCore.Mvc.Rendering для вашего списка выбора и элементов, которые не относятся к этому типу

0 голосов
/ 14 июня 2019

Проблема в помощнике asp-items. Требуется IEnumerable<SelectListItem> в качестве аргумента. Даже если вы определяете свойство в модели как IEnumerable<>, но используете ToList(), коллекция, которую вы назначаете для ministryItems, по-прежнему List<>, что вызывает исключение. Чтобы обойти это, вы должны сделать

ministryItems = db.Ministry.Select(x=>new SelectListItem{Value=x.Name,Text=x.Name}).ToList() as IEnumerable<SelectListItem>;

Лично я предпочитаю определять SelectList непосредственно на странице Razor.

В контроллере у нас есть

ministryItems = db.Ministry.ToList();

и в раскладке Razor

<select asp-items="@new SelectList(Model.ministryItems, nameof(Ministry.Name), nameof(Ministry.Name))">
    <option>Select Ministry</option>
</select>

Но на самом деле это вопрос вкуса.

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