我在 .NET 3.5 框架上使用 ASP.NET 网络表单。如何在 HTML 标签中实现自定义属性,例如:
<HTML lang="en">
我想在一个共同继承的基页上的代码中实现这一点。每次加载页面时,属性值将根据会话值动态设置。
后期添加:如果可能的话,我想在不对脚本标签进行任何 ASP 页面更改的情况下实现这一点
我在 .NET 3.5 框架上使用 ASP.NET 网络表单。如何在 HTML 标签中实现自定义属性,例如:
<HTML lang="en">
我想在一个共同继承的基页上的代码中实现这一点。每次加载页面时,属性值将根据会话值动态设置。
后期添加:如果可能的话,我想在不对脚本标签进行任何 ASP 页面更改的情况下实现这一点
建议的解决方案:
<HTML lang="<%= PageLanguage %>">
工作正常。Aleris 还有另一种选择,但还没有完全正确。如果将 runat="server" 属性添加到 HTML 标记,它将被解析为服务器端 HtmlGenericControl 并在 Controls 集合中可用。此外,如果您添加一个 id 属性,您将在后面的代码中有一个变量可以直接访问它,因此:
<html runat="server" id="html">
在代码隐藏中:
html.Attributes["lang"] = "en";
注意:这适用于页面中的任何 HTML 标记。
编辑:我现在看到 Aleris 确实做对了 - 他在包含 html 标记的 Controls 集合中引用了“文本”(实际上是 LiteralControl)(连同 doctype 和直到第一个服务器标记的任何其他内容)。当然,您可以操纵此文本,这将是(正如他所说)一种黑客行为 - 但它会将更改限制为仅代码隐藏。
我使用 Page 类的 AddParsedSubObject 方法。
在解析过程中可以通过 AddParsedSubObject 方法参数获取控件对象。
覆盖此方法,例如...
protected override void AddParsedSubObject(object control)
{
if (obj is LiteralControl)
{
String html = (obj as LiteralControl).Text;
if (Regex.IsMatch(html, "<html[^>]*>") == true)
{
String newhtml = Regex.Replace(html, "<html[^>]*>", "<html lang=\"en\">");
base.AddParsedSubObject(new LiteralControl(newhtml));
}
}
}
您可以自定义 html 标签和其他标签的输出。希望你的帮助!!
如果您碰巧使用了现有的ASP.NET 网页全球化脚手架,那么您想改用它:
@using System.Threading
<html lang="@Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName">
在 html 中:
<HTML lang="<%=myLang%>">
在代码隐藏中:
protected string myLang = "en"
解决方案1:
<HTML lang="<%= PageLanguage %>">
其中 PageLanguage 是基本页面的虚拟受保护属性。该值在派生页面中被覆盖(据我了解,您需要在页面级别更改此值?)
解决方案2:
Hack-it:Page.Controls[0] 包含一个包含 html 标记的文本。页面预渲染事件上的简单替换就可以了。
问题很旧,但可能对某人有用。这就是我所做的..
在后面的代码中:
public string langName
{
get
{
return Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
}
}
在 ASP.NET 页面中
<html lang="<%= langName %>">
我也在Local Resources
为每种语言和文化工作,所以我发现这是一个更好的解决方案。
另外,因为我使用的是母版页,所以我只需要添加一次。
如果您只是想对您的网站进行国际化,不妨使用 .net 提供的内置系统(因为它们很漂亮)。那是你想做的吗?或者是其他东西?
我用它来设置我在代码中使用的语言:
<html xmlns="http://www.w3.org/1999/xhtml" lang="<%= System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName %>">