2009-03-12 5 views
3

왜 이것이 렌더링시 날짜/시간을 표시하지 않습니까?Webform 속성의 인라인 코드

<asp:Label runat="server" ID="test" Text="<%= DateTime.Now.ToString() %>" ></asp:Label> 

어쨌든이 작업을 수행 할 수 있습니까?

답변

0

그럼 asp 태그가 렌더링됩니다. 런타임에 속성을 설정해야합니다. 또는 <%= DateTime.Now.ToString() %>을 수행하십시오.

4

Asp.net 서버 컨트롤 대신 당신이 할 수 있으며, <% = 잘 재생되지 않습니다 :

<span><%= DateTime.Now.ToString() %></span> 

시를. 코드 숨김에 레이블의 텍스트를 설정할 수도 있습니다. 시나리오에 따라 PreRenderComplete에서 설정할 수 있습니다.

0

여기 실제 문제는 마크 업 페이지에 코드가있는 WebControl의 속성을 설정해야한다는 것입니다. 이 작업을 수행하는 유일한 방법은 전체 컨트롤을 코드 블록에 넣는 것입니다. 그것의 우아한 또는 제안하지만 다른 모든 실패하면 작동합니다.

<% 
     var stringBuilder = new StringBuilder(); 
     var stringWriter = new StringWriter(stringBuilder); 
     var htmlWriter = new HtmlTextWriter(stringWriter); 
     var label = new Label { Text = DateTime.Now.ToString() }; 
     label.RenderControl(htmlWriter); 
     Response.Write(stringBuilder.ToString()); 
    %> 

그러나 컨트롤을 상태를 유지해야하는 경우에는 작동하지 않습니다.

업데이트 : 내가 더 나은 해결책을 찾을 않았다

케빈의 답변을 조사한 후. 나는 뒤에 MVC 페이지가없는 코드가 있지만 코드 블록을 통해 페이지의 컨트롤을 참조 할 수 있으므로 새로운 솔루션은 다음과 같습니다. 주 -이 작업을 수행하려면 먼저 코드 블록을 배치해야합니다.

<% 
    lblTest.Text = DateTime.Now.ToString(); 
%> 
<asp:label runat="server" ID="lblTest" /> 

영감을 주셔서 감사합니다.

+0

그 경우, 나는 여전히 PreRenderComplete (아마도 내 대답에 덧붙인 주석을 추가했다.) 또는 심지어 렌더 (base를하기 전에 라벨을 붙이면 라벨이 붙을 지 확신 할 수 없다.)에 codebehind에 추가하는 것이 더 좋다. .OnRender) – eglasius

+0

@ Chief7 - 질문에 MVC 태그를 추가하는 것이 좋습니다. – Kev

3

당신이 파일 뒤에 코드를 가지고 있는지 확실하지 않습니다,하지만 당신이 정말로에서 .aspx 마크 업 레이블의 Text 속성을 설정해야하는 경우 페이지에 다음 코드를 추가 할 수 있습니다

<script runat="server"> 
    protected override void OnPreLoad(EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      this.test.Text = DateTime.Now.ToString(); 
      base.OnPreLoad(e); 
     } 
    } 
</script> 

이렇게하면 다시 게시 할 때 레이블 컨트롤의 상태를 유지 관리 할 수 ​​있습니다.

+0

코드가 없거나 디자이너 파일 인 MVC 뷰 페이지이지만 감사합니다. – chief7

1

간단한 코드 대신에 데이터 바인딩 식을 사용하는 것입니다 그 일을 할 방법 렌더링 블록 ...

<asp:Label runat="server" ID="test" Text="<%# DateTime.Now.ToString() %>" ></asp:Label> 

이제 텍스트 속성이 설정 될 때마다 Page.DataBind() 당신이

protected override void OnPreRender(EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     DataBind(); 
    } 

    base.OnPreRender(e); 
} 
+0

여러분이 this.DataBind()가 아닌 test.DataBind()를 사용하도록 권장하십시오. 필요한 경우 모든 컨트롤이 DataBinding 이벤트를 통과 할 필요가 없습니다. – JJS

1

같은 아래로 레이블의 태그 내에 인라인 코드를 삽입 할 것입니다 코드 숨김 당신의, 그래서,라고

< asp:Label ID="Lbl" runat="server" Text=""> 
<%= DateTime.Now.ToString() %> 
< /asp:Label> 
관련 문제