簡単な質問ですが、何も見つかりません。asp:placeholder の内容を文字列にすることはできますか? 可能であれば、これはサーバー側で行うのに最適です。
ルーク
簡単な質問ですが、何も見つかりません。asp:placeholder の内容を文字列にすることはできますか? 可能であれば、これはサーバー側で行うのに最適です。
ルーク
プレースホルダーのテキスト コンテンツだけが必要な場合:
string textualContent = ((LiteralControl) PlaceHolder1.Controls[0]).Text;
返品
"Hello World"
対象:
<asp:PlaceHolder ID="PlaceHolder1" runat="server">Hello World</asp:PlaceHolder>
レンダリングされたコントロール (およびそのすべての子コントロール) の html も取得する場合:
System.IO.TextWriter tw = new System.IO.StringWriter();
HtmlTextWriter h = new HtmlTextWriter(tw);
PlaceHolder1.RenderControl(h);
string html = tw.ToString();
この aspx の場合 (これGridView
は、いくつかの sameple データでデータバインドされています):
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
<asp:Label ID="LblTest" runat="server">Test-Label</asp:Label>
<asp:TextBox ID="TxtTest" runat="server" Text="Foo"></asp:TextBox>
<asp:GridView runat="server" ID="GridView1"></asp:GridView>
<textarea name="TextArea1" rows="2" cols="1">
First line
Second line
</textarea>
</asp:PlaceHolder>
この html が生成されます (ブラウザによって異なります)。
<span id="MainContent_LblTest">Test-Label</span><input name="ctl00$MainContent$TxtTest" type="text" value="Foo" id="MainContent_TxtTest" /><div>
<table cellspacing="0" rules="all" border="1" id="MainContent_GridView1" style="border-collapse:collapse;">
<tr>
<th scope="col">ID</th><th scope="col">Text</th>
</tr><tr>
<td>1</td><td>Row #1</td>
</tr><tr>
<td>2</td><td>Row #2</td>
</tr><tr>
<td>3</td><td>Row #3</td>
</tr><tr>
<td>4</td><td>Row #4</td>
</tr><tr>
<td>5</td><td>Row #5</td>
</tr>
</table>
</div>
<textarea name="TextArea1" rows="2" cols="1">
First line
Second line
</textarea>
ページディレクティブを次のように変更する必要があることに注意してください
EnableEventValidation="false"
でオーバーライドVerifyRenderingInServerForm
するにはPage
public override void VerifyRenderingInServerForm(Control control)
{
/* Confirms that an HtmlForm control is rendered for the specified ASP.NET
server control at run time. */
}
RenderControl
手動で呼び出す場合。
RenderControl
の方法をお試しくださいPlaceholder
。
私は a に対してこのようなことをしましたHyperLink
が、 a がPlaceholder
から継承するSystem.Web.UI.Control
ので、まったく同じように動作するはずです。このようなもの:
StringBuilder sb = new System.Text.StringBuilder();
using (var stringWriter = new System.IO.StringWriter(sb))
{
using (var htmlTextWriter = new System.Web.UI.HtmlTextWriter(stringWriter))
{
YourPlaceHolder.RenderControl(htmlTextWriter);
}
}
return sb.ToString();
このトピックに関する短い記事を書きました: http://www.tomot.de/en-us/article/3/asp.net/create-a-control-in-the-codebehind-and-retrieve-its -レンダリング出力