2012-03-02 2 views
0

나는 페이지의 거의 모든 것을 생성하는 코드 인 웹 사이트를 운영하고 있습니다. 홈 페이지는 코드를 통해 빌드되는 오른쪽 메뉴로 구성됩니다. System.Web.UI.WebControls.TableCell 클래스를 사용하고 모든 새 항목에 대해 td를 만듭니다.System.Web.UI.WebControls.TableCell에 대체

Public Sub BuildMainMenuStructure(ByVal Cell As TableCell, _ 
            ByVal Contents As DataTable, _ 
            ByVal ReadMode As Boolean, _ 
            ByVal CurrentPage As String, _ 
            ByVal RecSecurity As ApplicationRoleSecurity, _ 
            ByVal SourcePageRef As Integer, _ 
            ByVal IncludeMyIntranetPanel As Boolean) 

    '----------------------------------------------------------------- 
    'Div1 Contents 
    '----------------------------------------------------------------- 
    'Set up the contents in a div (panel) called pnlMainMenu1 
    Dim mmContents As New MainMenuContents 
    mmContents.ID = "pcaMainMenuContents" 
    mmContents.SetControl(Contents, _ 
          ReadMode, _ 
          CurrentPage, _ 
          RecSecurity, _ 
          SourcePageRef) 

    mintContentsCount = mmContents.Count 

    Dim pnlMainMenu1 As New Panel 
    With pnlMainMenu1 
     .ID = "pcaMainMenuContentsPanel" 
     'By default, this panel is visible: 
     .Style.Add("visibility", "visible") 
     .Controls.Add(mmContents) 
    End With 

코드의 다른 영역에서 홈의 상이한 부분이 생성된다 :

If IncludeMyIntranetPanel And ReadMode Then 

     'Set up the contents in a div (panel) called pnlMainMenu2 
     Dim mmMyIntranet As New MainMenuMyIntranet 
     mmMyIntranet.ID = "pcaMainMenuMyIntranet" 
     mmMyIntranet.SetControl(Contents, _ 
           ReadMode, _ 
           CurrentPage, _ 
           RecSecurity, _ 
           SourcePageRef) 

     Dim pnlMainMenu2 As New Panel 
     With pnlMainMenu2 
      .ID = "pcaMainMenuMyIntranetPanel" 
      'By default, this panel is visible: 
      .Style.Add("visibility", "visible") 
      .Controls.Add(mmMyIntranet) 
     End With 

     'Add it to the cell: 
     Cell.Controls.Add(pnlMainMenu2) 

    End If 'End If IncludeMyIntranetPanel 

그것 Cell.Controls 통해 콘텐츠를 추가 여기

코드의 단편이다. 추가 (pnlMainMenu2)

홈 페이지를 다시 스킨으로 지정해야합니다. 이상적으로는 콘텐츠를 쉽게 배치 할 수 있도록 DIV 클래스를 생성하려고합니다.

데이터베이스의 데이터를 가져 와서 div 클래스를 만들 수있는 .net 클래스가 있습니까?

답변

2

확실한 대안이 있지만 사용할 대상을 결정하는 것은 정확히 무엇을 달성하려고하는지, 그리고 사용중인 .NET 버전에 달려 있습니다.

Panel control은 실제로 divs를 페이지에 출력합니다. 단, "div를 출력하고 싶습니다."라고하는 것이 좋지만, 필자가 권장할만한 것은 모르겠다. ASP.NET을 사용하여 포함 된 컨트롤에 대한 가시성 같은 것을 제어해야합니다. 그러나 기존 사이트의 경우 TableCell 컨트롤에 가장 가까운 "드롭 인"대체 사이트 일 것입니다.

Literal control은 대부분의 .NET 버전에 있으며 화면에 출력되는 내용을 완벽하게 제어 할 수 있지만 Panel 컨트롤과 마찬가지로 데이터 바인딩 컨트롤이 아닙니다. 코드 숨김에서 정보를 얻고, 원하는 것을 리터럴 .Text에 추가해야합니다. 단점은 코드 숨김 유형의 페이지에 원하는 HTML을 정확히 덤프하는 것이 ASP.NET 방식에 위배된다는 것입니다.

ListView control은 실제로 데이터 바인딩 된 컨트롤입니다. 일부 유형의 데이터베이스 연결을 제공하면 결과가 반복되어 목록이 표시됩니다. 해당 목록에 출력 된 HTML에 대해 완벽하게 제어 할 수 있으므로 divs, lis 등을 사용할 수 있지만 표시 할 항목을 결정할 때 논리를 사용하는 것이 더 까다 롭습니다. (더 이른, 관련된 컨트롤, the Repeater, 사용하기 더 kludgy하지만 이전 버전의 .NET에서 존재합니다.)

+1

나는 약간 말씨가되었지만, 필자는 다시 말해야한다고 생각합니다. Panel 컨트롤이나 리터럴 컨트롤에는 데이터베이스 인터랙션이 내장되어 있습니다. 데이터베이스 작업을하고 코드 숨김을 통해 출력을 추가해야합니다. 또한 Panel 컨트롤은 실제로 TableCell과 달리 텍스트를 가져 오지 않습니다. 예, DIV를 출력하지만 실제로 텍스트를 출력하려면 Label 또는 HyperLink 등 컨트롤을 추가해야합니다. –

+0

제가 작업하고있는 사이트의 문제점은 모든 것이 데이터베이스/코드 생성이라는 것을보십시오. 나는 개발자가 실제로 스타일 시트를 알고 있다고 생각하지 않는다! 홈 페이지를 "다시 스키닝 (re-skinning)"하는 것에 대한 이야기가 있지만, "물건"의 많은 부분이 계속 이어 지므로 홈 페이지를 새로운 디자인으로 스키닝하는 경우는 아닙니다. –