If PageChoice = "" Then
Dim myMainControl As Control = LoadControl("modules/contents.ascx")
myMainContent.Controls.Add(myMainControl)
skulle vilja skicka med ?id=1 efter contents.ascx men när jag lägger till det så klagar den på att kontrollen måste ha filändelsen ascx ... någon som har ett förslag hur man kan lösa det här?
Du skapar en property på din usercontrol som du sedan sätter.
Dim myMainControl As Control = LoadControl("modules/contents.ascx")
myMainControl.ID = 1
myMainContent.Controls.Add(myMainControl)
Nu måste du dock kasta din myMainControl från typen Control till den typ som din contrl är, säkert Contents. Innan du kan komma åt propertyn eftersom denna inte finns definerad i Control, utan endast i din egen UserControll.
Fungerar säkert utmärkt, dock inte så mycket ASP.NET teknink utan mer gammal ASP Teknik, vilket är vanligt när man inte vet hur man skall göra i .NET.
Du missar poängen med OOP och lägger in felkällor i din kod när du gör så. I ditt exempel så kan man faktiskt ändra ID eller ta bort det helt. Det kan man inte med min version, alltså har jag eliminerat en felkälla.
saken va den att jag förstog inte riktigt hur jag skulle göra när jag skulle kasta min myMainControl från typen Control till den typ som min contrl är. Förstår inte hur jag ska komma åt mitt id?
lägger in lite mer kod så kanske du förstår hur jag har gjort.
default.aspx.vb
Try
'======================================================
'## Om contents="" skickas besökaren till startsidan ##
If PageChoice = "" Then
Dim myMainControl As Control = LoadControl("modules/contents.ascx")
myMainContent.Controls.Add(myMainControl)
Dim myNewsControl As Control = LoadControl("modules/viewnews.ascx")
myNewsHolder.Controls.Add(myNewsControl)
Dim myPictureControl As Control = LoadControl("modules/pictures.ascx")
myPictureHolder.Controls.Add(myPictureControl)
Else
Dim myMainControl As Control = LoadControl("modules/contents.ascx?id=" & PageChoice & "")
myMainContent.Controls.Add(myMainControl)
Dim myNewsControl As Control = LoadControl("modules/viewnews.ascx")
myNewsHolder.Controls.Add(myNewsControl)
Dim myPictureControl As Control = LoadControl("modules/pictures.ascx")
myPictureHolder.Controls.Add(myPictureControl)
End If
Catch ex As Exception
'================================================================================
'## Logga felet i en textfil och visa ett allmänt felmeddelande för användaren ##
objmyPublisher.Publish(ex)
Dim myControl As Control = LoadControl("modules/error.ascx")
myMainContent.Controls.Add(myControl)
Dim myNewsControl As Control = LoadControl("modules/viewnews.ascx")
myNewsHolder.Controls.Add(myNewsControl)
Dim myPictureControl As Control = LoadControl("modules/pictures.ascx")
myPictureHolder.Controls.Add(myPictureControl)
End Try
Såhär gör jag för att hämta informationen från databasen
Dim objContents As myContentsClass = New myContentsClass()
Dim ds As DataSet = New DataSet()
Dim PageChoice As String = Request.QueryString("contents")
If PageChoice = "" Then
PageChoice = 1
End If
Try
ds = objContents.GetContentEntry(PageChoice)
objContents = Nothing
myContentsDatalist.DataSource = ds.Tables(0).DefaultView
myContentsDatalist.DataBind()
Catch ex As Exception
Throw (ex)
End Try
visa mig gärna hur man kan lösa det på rätt sätt ...