webForumDet fria alternativet

skicka med querystring när jag öppnar en usercontroll

.NET

6 svar · 279 visningar · startad av maqe

Medlem sedan dec. 2003824 inlägg
Frågan#1

såhär ser min kod ut

      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?

Medlem sedan maj 20012 812 inlägg
#2

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.

- Magnus

Medlem sedan dec. 2003824 inlägg
#3

Jag gjorde såhär i min contents.ascx istället

    Dim PageChoice As String = Request.QueryString("contents")

    If PageChoice = "" Then
      PageChoice = 1
    End If

funkar ju det me, bättre sämre ... vet ej =)

Medlem sedan maj 20012 812 inlägg
#4

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.

- Magnus

Medlem sedan dec. 2003824 inlägg
#5

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 ser min länk ut på default.aspx ut

<asp:HyperLink id=menulink style="padding-top:3px" Runat="server" Height="19" Text='<%# DataBinder.Eval(Container.DataItem, "menuname")%>' Tooltip='<%# DataBinder.Eval(Container.DataItem, "Tooltip")%>' NavigateUrl='<%# "default.aspx?contents=" + DataBinder.Eval(Container.DataItem, "MenuID").tostring %>'>
</asp:HyperLink>

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 ...

Medlem sedan maj 20012 812 inlägg
#6

Tyvärr kan jag inte hjälpa dig i VB, men så här gör jag i C#.

Säg att jag har en usercontrol som heter CustomControl

CustomControl myCustomControl = (CustomControl) LoadControl("Controls/CustomControl.ascx")
myCustomControl .ID = 1
this.Controls.Add(myCustomControl )

Detta borde fungera, det var ett tag sedan jag sysslade med ASP.NET och speciellt UserControls

- M

Medlem sedan dec. 2003824 inlägg
#7

Okay får det inte att fungera men tack endå

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)