2013-01-14 27 views
0

我已经创建了一个可以包含一个对象的多个实例的类,所有的数据都存储在会话中。直到运行时,我都不知道有多少实例。显示这种动态数据的最佳方法是什么?我使用代码背后的aspx,所以我认为它需要发生在负载子。如何根据通用对象显示动态HTML

万一有帮助,继承人的类,它在VB,但在C#中的答案是罚款:

Imports System.Web.HttpContext 

Public Class Student 

    Public Property SchoolId As Integer 
    Public Property Grade As Integer 
    Public Property StudentName As String 


    Public Sub AttachToSession(StudentToBeAdded As Student) 

     Dim StudentList As New List(Of Student) 

     If (Current.Session("student") Is Nothing) Then 

      StudentList.Add(StudentToBeAdded) 
      Current.Session("student") = StudentList 

     Else 

      StudentList = Current.Session("student") 
      StudentList.Add(StudentToBeAdded) 
      Current.Session("student") = StudentList 

     End If 

    End Sub 

End Class 
+0

这个问题是非常含糊。你有更具体的问题吗?也许你可以展示你尝试过的东西,或者你在找什么结果? – JDB

+0

对不起,我不需要实际的html,只是一种显示动态数据的方式。就像我通常会在服务器上使用标签或文本框和runat一样,但这些控件不映射到我的数据结构。我正在考虑2种可能的方式 - 包含一个html字符串或某种自定义控件的标签。我不太在.net中前进,所以我不太确定 – jriggs

+0

这将有助于您的问题的信息。你应该考虑编辑它。 – JDB

回答

0

或者,如果你想有一个自定义的外观和感觉,你可以尝试这样的事情(在你的aspx页面):

<% For Each l_student As Student In CType(Session("student"), List(Of Student)) %> 
    <div> 
     <p>Name: <%= l_student.StudentName %></p> 
     <p>Grade: <%= l_student.Grade %></p> 
    </div> 
<% Next %> 

这会为你的学生集合中的每个项目创建一个“格”元素。

参见:Introduction to ASP.NET inline expressions in the .NET Framework

你可能会更好创造您的学生班级共享属性,但:

Public Shared ReadOnly Property Students As List(Of Student) 
    Get 
     Dim l_studentList As List(Of Student) = TryCast(Current.Session("student"), List(Of Student)) 
     If l_studentList Is Nothing Then 
      l_studentList = New List(Of Student) 
      Current.Session("student") = l_studentList 
     End If 

     Return l_studentList 
    End Get 
End Property 

那么你的aspx是:

<% For Each l_student As Student In Student.Students %> 
... 
1

可以使用GridView控件来显示学生信息

标记

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True"> 
</asp:GridView> 

在您的代码

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 

    If Not IsPostBack Then 
     GridView1.DataSource = CType(Session("student"), List(Of Student)) 
     GridView1.DataBind() 
    End If 

End Sub 
+0

感谢您的快速响应。另一个答案更接近我试图完成的事情 – jriggs