繁体   English   中英

如何将一段VB.NET代码注入ASPX页面并执行它?

[英]How can I inject a piece of VB.NET code in to an ASPX page and have it execute?

将以下代码放在用户控件或ASPX页面中时按预期执行。

<script type="text/javascript">

    (function() {

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

它执行页面执行时所期望的渲染。

有什么办法可以在页面中动态注入此代码并执行它?

我尝试使用Literal Web Control并感到惊讶,它按字面意思输出了代码:)

社区没有太多可用于.NET的友好模板引擎 去年,我遇到了同样的麻烦,因为客户想要格式化自己的文本格式设置方式,因此不得不保留部分代码由客户维护。

我发现不进入任何第三方库的最简单方法就是使用ASPX呈现引擎的功能作为模板代码,但是使用可管理的方式。

为您的模板创建一个ASPX页面,例如~\\Templates\\LoggedInBlock.aspx并作为内容:

<script type="text/javascript">

    (function() {

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

现在创建一个模板渲染器通用处理程序,例如~\\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

现在,从您希望将动态代码块追加到另一个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代码。

尽管我相信在代码域中使用动态编译是可能的,但我认为它不是很干净

请参阅: http : //www.codeproject.com/KB/cs/smarttemplateengine.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM