none
Webユーザーコントロールの生成するHTMLコードを取得する方法はありませんでしょうか? RRS feed

  • 質問

  • いつもお世話になります。

    早速ですが、aaa.aspx ファイル内で帳票データとして

    パラメータUserIDをbbb.ascx内にプロパティとして渡して

    aaa.aspx内にてwebユーザーコントロールを表示しています。

    これらの帳票データをDBに保存する際に各項目を格納するのではなくbbb.ascxが受け取ったパラメータUserIDを元に生成するhtmlコード(実際にクライアントがブラウザで受け取るコードを意味しています)そのものを保存したく試行錯誤していますがなかなかうまくいきません。

    まずhttp://www.velocityreviews.com/forums/t96140-send-ascx-files-html-code-as-email.html

    を参考にascxをコントロールとして呼び出そうと以下のようにしてみましたが

    Dim c As Control = Me.bbb1  (bbb.ascx のIDです)
                         Dim Sw As New System.IO.StringWriter()
                         Dim Writer As HtmlTextWriter = New HtmlTextWriter(Sw)
                        Dim Contents As String = ""
                       Try
                          c.RenderControl(Writer)
                           Contents = Sw.GetStringBuilder().ToString()
                Finally
                           Sw.Close()
                Writer.Close()
                End Try

    、bbb.ascx内のgridviewが<form runat="server></form>内にありません

    というえらーでダメでした。

    (当然ですがbbb.ascxないには<from>タグは存在しません)

     

    次にaaa.aspxでbbb.ascx表示直後にbbb1のプロパティを探ってみましたが表示HTMLコードに関する情報は見当たりませんでした。唯一、innerHTMLの項目があったのですがこの値は無効になっていました。最後の方法としてVBあたりでwebBrowserコントロールを持ったアプリを作ってサーバー上で実際にアクセスしその生成されたコードを取得しようかと思ったのですが別アプリに頼る動作は信頼性の部分で劣るのであまりやりたくはありません。

    以上のような状況ですが、このようにユーザーコントロールの生成タグを取得、またはもうひとつの方法として仮想的にbbb.aspxというbbb.ascxと類似のページそのものを作成し、その吐き出すタグそのものを取得するような方法は存在するでしょうか?

     

    ご教示のほどよろしくお願いいたします。

    2007年4月18日 10:04

すべての返信

  • おそらく無理だったと思います。

    それよりはクライアントプログラム(ブラウザ)を作るほうがいいと思います。

    2007年4月18日 11:51
  • 早速のご返信ありがとうございます。

     

    1日考えた末に、コントロール側ではどうも無理っぽいので以下の方法をとってみました。

     

    http://www.codeproject.com/aspnet/serveriframe.asp

    これを参考に、

    1 ASCX内のhtml タグを<DIV id='IwantThisCode'></div>でかこむ

    2 ページ本体に<input type="hidden" name="PrefeCode" value="">を配置

    3 JAVAで document.aspnetForm.PreferCode.value=Document.getElementById("IwantThisCode").innerHTMLを実行

     

    で、ポストバック時にRequest.Form("PreferCode")に格納してひっぱって見ました

    一応うまくいってます。難点は取得の為に一度ポストバックが必須になるのですが

    まあ、仕方ないということで・・・・

     

     

    2007年4月19日 9:54
  • あれ?

     

    http://vsug.jp/tabid/63/forumid/47/postid/3056/view/topic/tpage/2/Default.aspx

     

    こちらにあるように VerifyRenderingInServerForm メソッドと EnableEventValidation プロパティをオーバーライドしてやると例外を出さずに RenderControl できるようになりませんか?

    2007年4月19日 10:45
  •  Keith K N さんからの引用

    以上のような状況ですが、このようにユーザーコントロールの生成タグを取得、またはもうひとつの方法として仮想的にbbb.aspxというbbb.ascxと類似のページそのものを作成し、その吐き出すタグそのものを取得するような方法は存在するでしょうか?

     
    本当に bbb.aspx を作成するなら、

    StringWriter output = new StringWriter();
    HttpRuntime.ProcessRequest(new SimpleWorkerRequest("bbb.aspx", "UserID=test", output));
     
    // TextBox1 に結果を出力
    this.TextBox1.Text = output.ToString();

     
    とかでよさそうですけど。
     
    2007年4月19日 10:57