2013-01-14 2 views
3

간단한 질문이지만 그것에 관해서 아무것도 찾을 수 없다. asp의 내용을 얻는 것이 가능하다 : placeholder? 가능한 경우 서버 측에서 작업하는 것이 좋습니다.asp : placeholder contents to string

누가 복음

+1

의미는 무엇입니까? "asp의 내용 : 문자열에 대한 자리 표시 자"_? genrated html을 원하십니까? 아니면 서버 측에 자리 표시 자의 텍스트 내용을 원하십니까? –

답변

6

당신은 단지 자리의 텍스트 내용하려면 다음

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(); 
이 영문의 경우

합니다 (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은 (생성 된 브라우저에 의존한다) : 당신이

,746,132에 페이지 지시문을 변경해야

<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> 

주 수동으로 RenderControl를 호출 할 때와

(10)는 Page

public override void VerifyRenderingInServerForm(Control control) 
{ 
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET 
     server control at run time. */ 
} 

VerifyRenderingInServerForm를 오버라이드 (override)합니다.

+0

Excellent, bookmarked :) – clamchoda

+0

VerifyRenderingInServerForm의 재정의에 아무 것도 추가해야 작동합니까? 현재 내 리피터 컨트롤이 작동하지 않습니까? –

+0

@LukeWilkinson : 아니, "작동하지 않는다"는 것은 무엇을 의미합니까? –

1

PlaceholderRenderControl 방법을 사용해보십시오.

나는 HyperLink에 대해 이렇게했지만, PlaceholderSystem.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-rendered-output