ASP.NETでHTMLを描画する場合、ページ全体ではなく、部分的にHTMLを描画したい場合がある。
手っ取り早くはやるには、Response.Write()で叩けばいいのだけど、これだと、せっかくのASPXテンプレートなんかが使えない。
そこで、ASP.NET Cookbookなんかを参考に、部分的にページをレンダリングするコードを書いてみた。
<%@ Page Language="VB" CodeFile="test.aspx.vb" Inherits="PartialRendering_test" %>
<html>
<head runat="server">
<title>パ^シャルレンダのテスト</title>
</head>
<body>
<form id="form1" runat="server">
ここは出力されるとまずいんですぅ。
<div id="cDiv" runat="server">
ここだけ出力されてればOKなんですぅ。
</div>
</form>
</body>
</html>
裏コードはこんな感じ
private sub PartialRender()
dim oStb as new StringBuilder
dim oWriter as New System.IO.StringWriter(oStb)
dim oHtmlWriter as new HtmlTextWriter(oWriter)
me.cDiv.RenderControl(oHtmlWriter)
Response.Write(oStb.ToString())
Response.End()
end sub
要するに、StringBuilder -> StringWriter -> HtmlTextWriterと三重にラップしておいて、ページ(あるいはコントロール)のRenderControlを呼び、ラップ元のStringBuilder.ToString()を吐けば、htmlが生成されるリクツである。
ファイルに保存してよし、作成のようにResponseに吐いてよし。けっこう使えます。
