如何在ASP.NET网页中以内联表达式调用共享类中的函数?
问题:在ASP.NET网页内联表达式中调用外部类的函数
我想在ASP.NET网页的内联表达式里调用外部共享类中的函数。如果函数在页面的代码后置文件里,我能正常调用,但放在独立类里就无法直接调用。以下是我的代码和尝试过程:
共享类代码
Public Class Class1 Public Function MyClassFunction() As String Return "Return results from MyClassFunction." End Function End Class
期望实现的效果(已知无法运行,仅作演示)
我希望能直接在控件属性中通过内联表达式调用该类的函数,示例代码如下:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="default.aspx.vb" Inherits="_default" %> <!doctype html> <html lang="zh-CN"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <p>我希望在內聯表達式中使用來自外部類的函數:</p> <asp:Label ID="Label1" runat="server" Text="<%$ Class1.MyClassFunction() %>" /> </form> </body> </html>
尝试方法1:代码后置声明实例 + 内联表达式
我在页面的代码后置文件中声明了Class1的实例,随后尝试使用嵌入式代码块、显示表达式、数据绑定表达式等多种内联表达式调用函数,但均无效。
代码后置声明:
Public Class _default Inherits System.Web.UI.Page Dim MySharedClass1 As New Class1 End Class
内联表达式尝试示例:
<asp:Label ID="Label1" runat="server" Text="<%= MySharedClass1.MyClassFunction() %>" /> <asp:FormView ...绑定数据源...> <asp:Label ID="Label1" runat="server" Text="<%# MySharedClass1.MyClassFunction() %>" /> </asp:FormView>
尝试方法2:使用Expression Builder
我参考旧示例实现了Expression Builder,当函数位于代码后置文件中时该方法有效,但调用外部类的函数仍然失败。
Expression Builder类代码:
Imports System.CodeDom Imports System.Web.Compilation <ExpressionPrefix("Code")> _ Public Class CodeExpressionBuilder Inherits ExpressionBuilder Public Overrides Function GetCodeExpression(entry As BoundPropertyEntry, parsedData As Object, context As ExpressionBuilderContext) As CodeExpression Return New CodeSnippetExpression(entry.Expression) End Function End Class
Web.config配置:
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.5"> <expressionBuilders> <add expressionPrefix="Code" type="CodeExpressionBuilder" /> </expressionBuilders> </compilation> </system.web> </configuration>
代码后置声明(与方法1一致):
Public Class _default Inherits System.Web.UI.Page Dim MySharedClass1 As New Class1 End Class
使用Expression Builder的内联表达式尝试:
<asp:Label ID="Label1" runat="server" Text="<%$ Code:MySharedClass1.MyClassFunction() %>" />
内容的提问来源于stack exchange,提问作者ptownbro
相关产品推荐
相关产品推荐

