求助一个vb.net无法向NVelocity模板引擎传递参数的问题

我没找到vb.net的资料就用C#的翻译成了下面vb.net代码,我是想把一个类的实例作为参数传给模板,但模板并未收到son的数据,请各位前辈帮忙看看,字符串类型和数值类型都以传递,唯独类的实例不可以传递,代码如下:
person类代码:

 Public Class person
    Public name As String
    Public age As Integer
End Class

html模板代码:

 <html>
<head>
    <title>无标题页</title>
</head>
<body>
$p.name
</body>
</html>

服器端ashx代码:

     context.Response.ContentType = "text/html"
        Dim son As New person
        son.name = "yxk"
        son.age = 123

        '创建模板类
        Dim vltengine As VelocityEngine
        vltengine = New VelocityEngine()
        vltengine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file")
        vltengine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/模板")) '模板文件所在的文件夹
        vltengine.Init()

        '设置参数
        Dim vltcontext As VelocityContext
        vltcontext = New VelocityContext() 
        vltcontext.Put("p", son) '设置参数,在模板中可以通过$data来引用

        Dim vlttemplate As Template
        vlttemplate = vltengine.GetTemplate("htmlmb2.htm")
        Dim vltwriter As System.IO.StringWriter
        vltwriter = New System.IO.StringWriter()
        vlttemplate.Merge(vltcontext, vltwriter)

        Dim html As String
        html = vltwriter.GetStringBuilder().ToString()
        context.Response.Write(html) 

2个回答

好吧,我又看到你了,貌似必须属性才能被认出来,你将Person声明为下面的这种写法就能认出来了

 Public Class Person
    Dim _name As String
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property


    Public age As Integer
End Class
u012864545
山大王1985 我以做了一复合类型的,也传不过去,请你帮我看看,是不是也要序列化,怎样才能序列化?
5 年多之前 回复

我以做了一复合类型的,也传不过去,请你帮我看看,是不是也要序列化,怎样才能序列化?
Structure struc
Dim na As String
Dim ya As String
End Structure

starfd
娃都会打酱油了 Public Structure Struc Public Property Na() As String Public Property Ya() As String End Structure
5 年多之前 回复
starfd
娃都会打酱油了 不是序列化,是要声明成属性,这个模板应该是通过属性来加载对应数据的,然后你这个struct声明的都是非public的?
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问