Asp.net剃刀下拉列表未填充



我使用微软的代码来本地化我的第一个web应用程序。

我看到这里的列表不是空的

@{
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

如果您想使用@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)

最新更新