Пользовательские атрибуты в веб-формах ASP.NET HTML-тег - PullRequest
3 голосов
/ 06 марта 2009

Я использую веб-формы ASP.NET на платформе .NET 3.5. Как получить пользовательский атрибут в теге HTML, например:

<HTML lang="en">

Я хочу добиться этого в коде на общей унаследованной базовой странице. Значение атрибута будет динамически устанавливаться на основе значения сеанса при каждой загрузке страницы.

Позднее добавление: я хочу добиться этого без каких-либо изменений страницы ASP в тегах скрипта, если это возможно

Ответы [ 8 ]

8 голосов
/ 06 марта 2009

Предлагаемое решение:

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

отлично работает. Есть еще одна альтернатива, на которую стоит Aleris, но не совсем правильно. Если вы добавите атрибут runat = "server" в тег HTML, он будет проанализирован на стороне сервера HtmlGenericControl и будет доступен в коллекции Controls. Кроме того, если вы добавите атрибут id, в коде будет переменная для прямого доступа к нему, таким образом:

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

в коде:

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

Примечание: это верно для любого тега HTML на вашей странице.

Редактировать : теперь я вижу, что Алерис все понял правильно - он ссылается на «текст» (фактически, LiteralControl) в коллекции Controls, который содержит тег html (наряду с типом документа и всем остальным до первого тега сервера). Конечно, вы можете манипулировать этим текстом, и это будет (по его словам) взломом - но это ограничит изменения только кодом-кодом.

2 голосов
/ 30 сентября 2015

если вы используете существующую глобализацию веб-страницы ASP.NET , то вы хотите использовать ее вместо:

@using System.Threading
<html lang="@Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName">
2 голосов
/ 24 марта 2009

Я использую метод AddParsedSubObject класса Page.

Вы можете получить объект управления с помощью параметра метода 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-тега, а также другого тега. Надеюсь на вашу помощь !!

1 голос
/ 21 апреля 2017

Вопрос старый, но может быть кому-то полезен. Вот что я сделал ..

В коде позади:

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

В ASP.NET PAGE

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

Я работал с Local Resources для каждого языка и культуры, поэтому я нашел, что это лучшее решение.

Кроме того, поскольку я использовал главную страницу, мне пришлось добавить ее только один раз.

1 голос
/ 06 марта 2009

Решение 1:

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

где PageLanguage - это виртуально защищенное свойство вашей базовой страницы. Значение переопределяется на полученных страницах (насколько я понимаю, вам нужно изменить это на уровне страницы?)

Решение 2:

Hack-it: Page.Controls [0] содержит текст, содержащий HTML-тег. Простое замещение на событии prerender страницы сделало бы это.

1 голос
/ 06 марта 2009

в html:

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

В коде позади:

protected string myLang = "en"
0 голосов
/ 22 августа 2017

Я использую это, чтобы установить язык, который я использую в своем коде:

<html xmlns="http://www.w3.org/1999/xhtml" lang="<%= System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName %>">
0 голосов
/ 16 августа 2009

Если вы просто пытаетесь интернационализировать свой веб-сайт, вы можете также использовать встроенные системы, предоставляемые .net (потому что они прекрасны). Это то, что вы хотите сделать? Или что-то еще?

...