【发布时间】:2020-06-01 12:55:58
【问题描述】:
我使用 Microsoft 的代码来本地化我的第一个 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
【问题讨论】:
-
我创建了一个没有任何问题的演示,你的意思是
cultureItems有正确的数据而下拉菜单没有显示它们(两个代码都在部分视图中)?你使用3.0并且可以你展示你的完整代码(部分视图,startup.cs...) -
@XingZou 对,但我不使用局部视图,我直接使用主视图。也许这就是问题所在?
-
你把两个代码块放在同一个剃刀视图上吗?它应该也可以。我建议你可以用一个新项目创建一个简单的演示。你能显示你的调试器和启动代码的屏幕截图吗?
-
@XingZou 是的,一切都在一个单一的剃须刀视图中。浏览器的输出和视觉工作室的输出一样好。我已经更新了问题并将生成的下拉列表放在那里
-
@XingZou 然而,这有效
@Html.DropDownList("selectLanguage", cultureItems),但我需要调用 onchange 。你能帮我解决这个问题吗?
标签: asp.net asp.net-core razor drop-down-menu combobox