3

我在 .NET 3.5 框架上使用 ASP.NET 网络表单。如何在 HTML 标签中实现自定义属性,例如:

<HTML lang="en">

我想在一个共同继承的基页上的代码中实现这一点。每次加载页面时,属性值将根据会话值动态设置。

后期添加:如果可能的话,我想在不对脚本标签进行任何 ASP 页面更改的情况下实现这一点

4

8 回答 8

8

建议的解决方案:

<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 和直到第一个服务器标记的任何其他内容)。当然,您可以操纵此文本,这将是(正如他所说)一种黑客行为 - 但它会将更改限制为仅代码隐藏。

于 2009-03-06T12:00:19.290 回答
2

我使用 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 标签和其他标签的输出。希望你的帮助!!

于 2009-03-24T14:43:03.533 回答
2

如果您碰巧使用了现有的ASP.NET 网页全球化脚手架,那么您想改用它:

@using System.Threading
<html lang="@Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName">
于 2015-09-29T22:56:27.827 回答
1

在 html 中:

<HTML lang="<%=myLang%>">

在代码隐藏中:

protected string myLang = "en"
于 2009-03-06T10:21:44.720 回答
1

解决方案1:

<HTML lang="<%= PageLanguage %>">

其中 PageLanguage 是基本页面的虚拟受保护属性。该值在派生页面中被覆盖(据我了解,您需要在页面级别更改此值?)

解决方案2:

Hack-it:Page.Controls[0] 包含一个包含 html 标记的文本。页面预渲染事件上的简单替换就可以了。

于 2009-03-06T10:28:44.673 回答
1

问题很旧,但可能对某人有用。这就是我所做的..

在后面的代码中:

  public string langName
            {
                get
                {
                    return Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
                }
            }

在 ASP.NET 页面中

<html lang="<%= langName %>">

我也在Local Resources为每种语言和文化工作,所以我发现这是一个更好的解决方案。

另外,因为我使用的是母版页,所以我只需要添加一次。

于 2017-04-21T14:03:14.103 回答
0

如果您只是想对您的网站进行国际化,不妨使用 .net 提供的内置系统(因为它们很漂亮)。那是你想做的吗?或者是其他东西?

于 2009-08-16T04:59:38.090 回答
0

我用它来设置我在代码中使用的语言:

<html xmlns="http://www.w3.org/1999/xhtml" lang="<%= System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName %>">
于 2017-08-22T19:21:46.863 回答