Asp. net Раскрывающийся список бритвы не заполнен - PullRequest
0 голосов
/ 17 февраля 2020

Я использую код Microsoft для локализации своего первого веб-приложения.

Я вижу здесь, что список не пустой

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOptions.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
        .ToList();
    var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}

Но выпадающий список пуст

<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
    <form id="selectLanguage" asp-controller="Home" 
          asp-action="SetLanguage" asp-route-returnUrl="@returnUrl" 
          method="post" class="form-horizontal" role="form">
        <label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label> <select name="culture"
          onchange="this.form.submit();"
          asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems">
        </select>
    </form>
</div>

Что не так в этом коде?

Сгенерированный HTML выглядит следующим образом

    <div title="Request culture provider: AcceptLanguageHeaderRequestCultureProvider">
        <form id="selectLanguage" asp-controller="Home" asp-action="SetLanguage" asp-route-returnUrl="/" method="post" class="form-horizontal" role="form">
            Language: <select name="culture" asp-for="de" asp-items="cultureItems"></select>
        </form>
    </div>

Вот еще один пример, который также имеет те же проблемы. https://github.com/aspnet/Entropy/blob/master/samples/Localization.StarterWeb/Views/Shared/_SelectLanguagePartial.cshtml

1 Ответ

1 голос
/ 19 февраля 2020

Если вы хотите использовать @Html.DropDownList, попробуйте использовать следующий код:

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOptions.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName ,Selected = (c.Name == requestCulture.RequestCulture.UICulture.Name )})
        .ToList();
    var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}
<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
    <form id="selectLanguage" asp-controller="Home"
          asp-action="SetLanguage" asp-route-returnUrl="@returnUrl"
          method="post" class="form-horizontal" role="form">
        <label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label>

        @Html.DropDownList("culture", cultureItems, new
           {
               onchange = @"this.form.submit();"
           })

    </form>
</div> 

Действие:

[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
...