Выполнить html из базы данных на странице ASP.NET

Любые предложения по загрузке html-страницы, сохраненной в базе данных?

HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>xxx</title>

</head>
<body>
    <form id="Form1" runat="server" method="post">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />            
    </form>
</body>

codebehind:

 protected override void OnInit(EventArgs e)
    {
        this.IniciarFormulario();

        using (ServicoECMClient proxy = new ServicoECMClient())
        {
            tipoDocumento = proxy.ObterTipoDocumento(int.Parse(tipoDocumentoID));
        }

        if (tipoDocumento == null)
        {
            throw new ApplicationException();
        }

        this.Page.Header.InnerHtml = tipoDocumento.estilo; //css

        this.Page.Form.InnerHtml = tipoDocumento.form; // form 

        base.OnInit(e);
    }

Я не могу получить значения формы.

Смотреть:

 foreach (System.Web.UI.Control controle in this.Form1.Controls)
            {
                if (controle.GetType().Name == "HtmlInputText" || controle.GetType().Name == "HtmlInputSelect"
                    || controle.GetType().Name == "HtmlInputRadio" || controle.GetType().Name == "HtmlInputTextCheckbox")
                {
                    if (!string.IsNullOrEmpty(this.Request[controle.ClientID]))
                    {
                        documento_indice documentoIndice = new documento_indice();
                        documentoIndice.id_indice = int.Parse(controle.ClientID.Split('_')[1]);
                        documentoIndice.valor = this.Request[controle.ClientID];
                        documentoIndice.timestamp = DateTime.Now;
                        documentos_indices.Add(documentoIndice);
                    }
                }
            }

Элементы управления пусты. => это.Form1.Controls

Любое предложение?

Есть другой лучший способ сделать?

Спасибо.


person Gus    schedule 17.11.2011    source источник
comment
Это html-страница. В начале нет разметки Aspx, указывающей на то, что она получена из исходного кода, а также не указывает, что страница даже соответствует требованиям; как таковой, он никогда не будет отображаться в коде позади. Является ли HTML полным?   -  person    schedule 18.11.2011
comment
Если вы просто хотите вывести необработанный html из базы данных, просто используйте файл обработчика (ashx) и Response.Write() для вывода HTML.   -  person Ben Robinson    schedule 18.11.2011
comment
Загляните в VirtualPathProvider msdn.microsoft.com/en- мы/библиотека/   -  person Jon Adams    schedule 18.11.2011
comment
Привет всем, @kurtnelle Это моя страница aspx. Я завершаю его здесь (this.Page.Header.InnerHtml = tipoDocumento.estilo; //css this.Page.Form.InnerHtml = tipoDocumento.form; // form ). Не помещайте сюда всю реализацию. Но я могу получить доступ к коду.   -  person Gus    schedule 18.11.2011


Ответы (2)


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

Длинный ответ заключается в том, что это потребует некоторой реструктуризации вашего приложения и HTML.

Мы нашли самый простой способ реализовать это через UserControls. Основной подход:

1) Создайте содержимое своей страницы, которое хранится в БД как UserControl, т.е.

<%@ Control Language="vb" AutoEventWireup="false" %>
<input id="txtTest" type="text" runat="server" />

2) Когда вы извлекаете его из БД, сохраните его в файле на диске с расширением ascx (скажем, content.ascx сейчас).

3) Измените свою главную страницу, чтобы добавить div, работающий на сервере, на который будет загружен ascx:

<div id="divContent" runat="server">
</div>

4) На странице init загрузите элемент управления в div и инициализируйте его:

Dim oControl As Control

' Load a user control
oControl = Me.LoadControl("content.ascx")
If oControl IsNot Nothing Then
    ' Ensure viewstate is enabled
    oControl.EnableViewState = True
    ' Set properties as required
    oControl.ID = "ContentControl"
    ' Clear the existing control(s) from the content container
    Me.divContent.Controls.Clear()
    ' And add the new one
    Me.divContent.Controls.Add(oControl)
End If

5) Получите доступ к коллекции элементов управления, содержащихся в элементе управления div.

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

Я убедился, что отделенный код не требуется, и это работает правильно, как описано выше.

person competent_tech    schedule 18.11.2011
comment
буду делать так.позже выложу результат. Спасибо!! - person Gus; 18.11.2011

Если вы не добавите элементы управления в коллекцию элементов управления вручную (сложное дело), ​​вам нужно будет прочитать значения формы старомодным способом:

Request.Form["txtSomething"]

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

person sq33G    schedule 18.11.2011