ASP.Net Core 2.1 MVC SelectList в представлении не заполняется - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю над веб-сайтом ASPNet Core 2.1 MVC и пытаюсь получить список выбора, чтобы заполнить его списком компаний (значение = Id, текст = CompanyName).Я вижу, что данные существуют в списке в ViewModel, но, что бы я ни пытался, я не могу отобразить данные в раскрывающемся списке в представлении.

Я следую за первым вариантомрекомендация SelectList от этого SO сообщения

Вот мой класс EditSite ViewModel

public class EditSite
{
    public int Id { get; set; }

    [Required]
    [StringLength(50, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 2)]
    [Display(Name = "Site Name")]
    public string SiteName { get; set; }

    [Display(Name = "Enabled")]
    public bool IsEnabled { get; set; }

    public string ReturnUrl { get; set; }

    public List<CompanySelect> CompanyList { get; set; }

}

Вот мой класс модели CompanySelect

public class CompanySelect
{
    public int Id { get; set; }

    public string CompanyName { get; set; }

}

Здесьмое действие «Редактировать» в контроллере сайтов;

    public async Task<IActionResult> Edit([FromQuery] int id, string returnUrl = null)
    {
        await SetCurrentUser();
        ViewData["Role"] = _currentRole;

        var tokenSource = new CancellationTokenSource();
        var token = tokenSource.Token;

        var response = await _client.GetSiteAsync(id, $"api/companies/{SetCompanyId()}/sites/{id}", token);
        if (response == null)
        {
            return NotFound($"Unable to find a record for Company ID [{id}].");
        }
        var site = _mapper.Map<EditSite>(response.Site);
        if (_currentRole != UserRoles.SysAdmin) return View(site);
        site.CompanyList = await GetCompaniesForSelectList();
        return View(site);

    }

Вот снимок экрана при отладке, показывающий, что site.CompanyList заполнен данными.enter image description here

Вот выбор в моем моем представлении

<div class="form-group">
    <label asp-for="CompanyName"></label>
    <select asp-for="Id" asp-item="@(new SelectList(Model.CompanyList, "Id","CompanyName"))" class="form-control">
        <option>Please select a Company</option>
    </select>
</div>

Вот снимок экрана, показывающий, что модель представления содержит данные, заполненные в этой точке в представлении.enter image description here

А вот скриншот, когда я открываю раскрывающийся список на веб-странице, без каких-либо компаний.

enter image description here

Кажется, это должно быть очень прямым.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 29 ноября 2018
<select asp-for="Id" asp-item="@(new SelectList(Model.CompanyList, "Id","CompanyName"))" ...>

Помощник тега select написан как asp-item, но должен быть asp-items.

Помощник тега select asp-for указывает имя свойства модели для элемента select, а asp-items указывает элементы option.

См. Эту документацию здесь: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-2.1

...