【问题标题】:Custom attributes in ASP.NET web forms HTML tagASP.NET Web 表单 HTML 标记中的自定义属性
【发布时间】:2010-10-11 17:25:37
【问题描述】:

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

<HTML lang="en">

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

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

【问题讨论】:

  • 有几种方法可以实现这一点,所以请详细描述您想要实现的目标,以便我们为您提供最佳解决方案:-)!

标签: .net asp.net webforms code-behind


【解决方案1】:

在 html 中:

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

在代码隐藏中:

protected string myLang = "en"

【讨论】:

  • 感谢亚历克斯,我希望避免 ASP 页面更改,因为有 100 个要更改。我现在已经编辑并澄清了这个问题。
【解决方案2】:

解决方案 1:

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

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

解决方案 2:

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

【讨论】:

    【解决方案3】:

    建议的解决方案:

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

    工作正常。 Aleris 还有另一种选择,但还没有完全正确。如果将 runat="server" 属性添加到 HTML 标记,它将被解析为服务器端 HtmlGenericControl 并在 Controls 集合中可用。此外,如果您添加一个 id 属性,您将在后面的代码中有一个变量可以直接访问它,因此:

    <html runat="server" id="html">
    

    在代码隐藏中:

    html.Attributes["lang"] = "en";
    

    注意:这适用于页面中的任何 HTML 标记。

    编辑:我现在看到 Aleris 确实做对了 - 他在包含 html 标记(以及 doctype 和任何内容)的 Controls 集合中引用了“文本”(实际上是 LiteralControl)否则直到第一个服务器标签)。当然,您可以操纵此文本,这将是(正如他所说)一种 hack - 但它会将更改限制为仅代码隐藏。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          如果您碰巧使用了现有的ASP.NET Web Page Globalization 脚手架,那么您想改用它:

          @using System.Threading
          <html lang="@Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName">
          

          【讨论】:

            【解决方案7】:

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

            在后面的代码中:

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

            在 ASP.NET 页面中

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

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

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

            【讨论】:

              【解决方案8】:

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

              <html xmlns="http://www.w3.org/1999/xhtml" lang="<%= System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName %>">
              

              【讨论】:

                猜你喜欢
                • 2013-05-16
                • 1970-01-01
                • 1970-01-01
                • 2019-04-15
                • 1970-01-01
                • 2011-06-29
                相关资源
                最近更新 更多