2011-11-08 3 views
0

다음 코드 부분은 사용자 정의 컨트롤이나 ASPX 페이지에있을 때 예상대로 실행됩니다.ASPX 페이지에 VB.NET 코드를 삽입하여 실행 시키려면 어떻게해야합니까?

<script type="text/javascript"> 

    (function() { 

     if (someCondition) {    
      if (<%=MyObject.IsActiveSession.ToString().ToLower() %>) { 
      <% If (MyObject.IsLoggedIn) Then %> 
       // Do some fancy stuff 
      <% End If %> 
      } 
     } 
    })(); 
</script> 

페이지가 실행될 때 예상대로 렌더링됩니다.

이 코드를 페이지에 동적으로 삽입하여 실행할 수있는 방법이 있습니까?

나는 리터럴 웹 컨트롤과 놀라움 놀라움을 사용하여 시도, 그것을 출력 코드 문자 그대로 :)

내가이 된 CodeDom에 동적 컴파일을 사용하는 것이 가능하다 생각하지만
+0

"동적"을 정의하십시오. 코드는 어디에서 유래됩니까? –

+0

아마도 데이터베이스 –

답변

1

는 지역 사회를위한 .NET의이어야에 대한 사용할 수 많은 친화적 인 템플릿 엔진이 없습니다. 작년에 똑같은 문제가 발생하여 고객이 유지하는 코드의 일부를 텍스트 서식 지정 방식으로 형식화해야했습니다.

제 3 자 라이브러리를 사용하지 않고 발견 된 가장 쉬운 방법은 템플릿 코드로 렌더링 엔진 ASPX 렌더링 엔진의 힘을 사용하는 것입니다. ~\TemplateRenderer.ashx

에서 이제
Imports System 
Imports System.Collections.Generic 
Imports System.IO 
Imports System.Linq 
Imports System.Web 

Namespace TestApp1 
    Public Class TemplateRenderer 
     Implements IHttpHandler 
     Private Function GetContent(context As HttpContext, tempateName As String) As String 
      Using textWriter = New StringWriter() 
       context.Server.Execute(String.Format("~/Templates/{0}", tempateName), textWriter) 
       Return textWriter.ToString() 
      End Using 
     End Function 

     Public Sub ProcessRequest(context As HttpContext) 
      context.Response.Write(GetContent(context, context.Request.QueryString("template"))) 
     End Sub 

     Public ReadOnly Property IsReusable() As Boolean 
      Get 
       Return False 
      End Get 
     End Property 
    End Class 
End Namespace 

당신이 동적 원하는 예를 들어,

<script type="text/javascript"> 

    (function() { 

     if (someCondition) {    
      if (<%=MyObject.IsActiveSession.ToString().ToLower() %>) { 
      <% If (MyObject.IsLoggedIn) Then %> 
       // Do some fancy stuff 
      <% End If %> 
      } 
     } 
    })(); 
</script> 

지금 템플릿 렌더러 제네릭 처리기를 만들 :

는 예를 ~\Templates\LoggedInBlock.aspx과 내용으로 템플릿에 대한 ASPX 페이지 만들기 코드 블록은 ASPX 페이지의 또 다른 작은 조각으로 추가합니다.

Protected Sub Page_Load(sender As Object, e As EventArgs) 
    Dim templateName = "LoggedInBlock.aspx" 
    Using textWriter = New StringWriter() 
     Server.Execute(String.Format("~/TemplateRenderer.ashx?template={0}", templateName), textWriter) 
     dynamicCodeInjectPanel.InnerHtml = textWriter.ToString() 
    End Using 
End Sub 

예 : http://converter.telerik.com/은 C#에서 VB 코드로 변환하는 데 사용됩니다.

관련 문제