Добавить doctype на страницу aspx динамически из ascx.cs

Можно ли добавить <!DOCTYPE HTML> на страницу aspx из кода за файлом страницы ascx? Добавление doctype на главную страницу не вариант, потому что это разрушит остальные наши сайты sharepoint.

Я попытался переопределить метод рендеринга:

protected override void Render(HtmlTextWriter writer)
{
    StringBuilder sb = new StringBuilder("<!DOCTYPE HTML>");
    HtmlTextWriter textWriter = new HtmlTextWriter(new System.IO.StringWriter(sb));
    //base.Render(writer);
    base.Render(textWriter);
    writer.Write(sb.ToString());  
}

но, видимо, это не помогает.


person Phu Minh Pham    schedule 22.10.2014    source источник


Ответы (2)


Для меня это работало так:

Сначала я добавил литерал вверху страницы, в первой строке, за пределами <Form runat="server":

<asp:Literal runat="server" ID="litHTMLSchema"></asp:Literal>

Затем из кода программной части:

// HTML 5
litHTMLSchema.Text = @"<!DOCTYPE html>" + Environment.NewLine + @"<html>";

Я не думаю, что это лучший подход, но он работает без проблем.

person SmartDev    schedule 22.10.2014
comment
Мне не повезло: / по-видимому, doctype закомментировали. Мне нужно добавить doctype на сайт aspx, а не на сайт ascx - person Phu Minh Pham; 22.10.2014
comment
@AirTrickz затем сделайте это на своей странице aspx. - person SmartDev; 22.10.2014
comment
Я не могу изменить страницу aspx, так как мы развиваемся в динамике и используем sharepoint для создания определения страницы, содержащего пользовательский элемент управления. - person Phu Minh Pham; 22.10.2014

Поскольку вы используете sharepoint, вы можете создать собственный веб-элемент управления в коде в решении для фермы пакетов WSP.

  1. Создайте класс под названием DynamicDocTypeControl

    public class DynamicDocTypeControl : System.Web.UI.WebControl *(check namespace  for typos)
    {
        override Render(...) {
            //add some conditional logic here for your dynamicness...
            writer.Write("<!DOCTYPE HTML>");
        }
    }
    
  2. Добавьте в проект пустой элемент sharepoint, перейдите в окно свойств и используйте раздел безопасного элемента управления в окне свойств, чтобы зарегистрировать элемент управления в качестве безопасного элемента управления.

  3. Скомпилируйте / упакуйте wsp и разверните его на ферме.

Затем отредактируйте главную страницу в конструкторе sharepoint и поместите на нее свой элемент управления, где должен отображаться тип документа.

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

Просто разместите код на странице aspx, который устанавливает значение HttpContext.Current.Item ..., которое элемент управления doctype ищет, чтобы определить, следует ли его отображать. Пока ваша страница aspx устанавливает флаг конфигурации перед вызовом Render, он будет там, когда срабатывает рендеринг в элементе управления типом документа.

e.g.

<@ Register TagPrefix="XYZ" Namespace="XYZ.Controls" Assembly="XYZ... (include fully qualified assembly name)" />


<XYZ:DynamicDocTypeControl />
person Ryan Mann    schedule 22.10.2014