【发布时间】:2017-09-20 14:05:59
【问题描述】:
我正在开发一个 asp .net 项目。我需要将其全球化,所以我遵循了developpez.com (This one) 上的教程(我是初级开发人员)。我的教程有问题,但经过一些搜索后我解决了。目前,我有 2 个链接:
我想做的是有标志而不是文本。所以,我想向''元素添加一个类并放置一个背景图像。但是当我添加类时,由 Html.Helper 生成的链接变得奇怪了。添加了一些参数,我不明白为什么。
编辑:我忘了写链接在添加类时不会改变语言。
向链接添加类之前的 URL
<a href="/en">English</a>
<a href="/">[Français]</a>
将类添加到链接后的 URL
<a href="/?Count=6&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D">English</a>
<a class="drapeauFrance" href="/?Count=6&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D">[Français]</a>
我如何包含指向我的部分视图的链接
@using MIFA.Helpers
@Html.LanguageSelectorLink("en", "[English]", "English", null)
@Html.LanguageSelectorLink("fr", "[Français]", "Français", new { @class = "drapeauFrance" })
LangageSelectorLink 的工作原理
public static MvcHtmlString LanguageSelectorLink(this HtmlHelper helper, string cultureName, string selectedText, string unselectedText, object htmlAttributes, string languageRouteName = "lang", bool strictSelected = false)
{
var language = helper.LanguageUrl(cultureName, languageRouteName, strictSelected);
var link = helper.RouteLink(language.IsSelected ? selectedText : unselectedText, "LocalizedDefault", language.RouteValues, htmlAttributes);
return link;
}
LangageUrl 的工作原理
public static Language LanguageUrl(this HtmlHelper helper, string cultureName, string languageRouteName = "lang", bool strictSelected = false)
{
cultureName = cultureName.ToLower();
var routeValues = new RouteValueDictionary(helper.ViewContext.RouteData.Values);
var queryString = helper.ViewContext.HttpContext.Request.QueryString;
foreach (string key in queryString)
{
if (queryString[key] != null && !string.IsNullOrWhiteSpace(key))
{
if (routeValues.ContainsKey(key))
{
routeValues[key] = queryString[key];
}
else
{
routeValues.Add(key, queryString[key]);
}
}
}
var actionName = routeValues["action"].ToString();
var controllerName = routeValues["controller"].ToString();
routeValues[languageRouteName] = cultureName;
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection);
var url = urlHelper.RouteUrl("LocalizedDefault", routeValues);
var current_lang_name = Thread.CurrentThread.CurrentUICulture.Name.ToLower();
var isSelected = strictSelected ? current_lang_name == cultureName : current_lang_name.StartsWith(cultureName);
return new Language()
{
Url = url,
ActionName = actionName,
ControllerName = controllerName,
RouteValues = routeValues,
IsSelected = isSelected
};
}
我请求您帮助了解为什么在我添加 html 属性时 URL 会发生更改。
我试图理解函数“LanguageUrl”,因为在我看来问题就在这里,但我的知识太薄弱,无法理解它或理解 htmlAttributes 对 URL 的影响。
如果我犯了一些英文错误,请告诉我我会编辑我的问题。
提前感谢您的回答。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4 razor