1

データベースに保存されている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>

コードビハインド:

 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);
                    }
                }
            }

コントロールは空です。=> this.Form1.Controls

なにか提案を?

別のより良い方法がありますか?

ありがとう。

4

2 に答える 2

2

簡単に言えば、はい、この機能を動作させることができます。これと同様の方法で、お客様固有のカスタマイズをすべて提供します。

長い答えは、アプリケーションと HTML の再構築が必要になるということです。

これを実装する最も簡単な方法は、UserControls を使用することです。基本的なアプローチは次のとおりです。

1)DBにUserControlとして保存されるページコンテンツを作成します。つまり、

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

2) DB から抽出したら、拡張子が ascx のディスク上のファイルに保存します (ここでは content.ascx とします)。

3) メイン ページを変更して、ascx が読み込まれるサーバーで実行される div を追加します。

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

4) ページの初期化で、コントロールを 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 コントロールに含まれるコントロールのコレクションにアクセスします。

ページ ポストバックでは、標準のページ ライフサイクルにより、ページ ロード イベントが発生するまで、コントロールにコンテンツがロードされないことに注意してください。

コードビハインドが不要であることを確認しました。これは上記のとおり正確に機能します。

于 2011-11-18T01:32:44.683 に答える
1

コントロールをコントロール コレクションに手動で追加しない限り (トリッキーな作業です)、フォームの値を昔ながらの方法で読み取る必要があります。

Request.Form["txtSomething"]

つまり、名前がわかっている場合はコントロールに含まれる文字列値を取得できますが、それ以外はほとんど取得できません。

于 2011-11-18T00:53:17.930 に答える