Avatar billede emkay Nybegynder
29. august 2007 - 20:15 Der er 19 kommentarer og
2 løsninger

Finde control på side via en custom class

Hey..

Jeg har følgende:

Class1.vb:
************************
    Public Sub fixpage(ByRef Page As System.Web.UI.Page)

        Dim pnlTest As Panel = Page.FindControl("pnlTest")

        If Not pnlTest Is Nothing Then
            pnlTest.Visible = True
        End If

    End Sub
************************

mypage.aspx.vb:
************************
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        class1.fixpage(Page)

    End Sub
************************


Det virker bare ikke..
Den kan ikke finde mit panel. Class'en fungerer fint nok i andre sammenhænge.

Jeg kan f.eks. godt gøre det med class1.fixpage(Master) og Dim pnlTest As Panel = Master.FindControl("pnlTest")

Men hvis jeg prøver at få fat i en kontrol på selve siden virker det ikke.
Hvad gør jeg galt?
Avatar billede neoman Novice
29. august 2007 - 20:34 #1
Det virker hos mig hvis jeg siger:
    Public Shared Sub fixpage(ByRef Page As System.Web.UI.Page)
Avatar billede emkay Nybegynder
29. august 2007 - 20:44 #2
Kan du godt få fat på en kontrol på siden ved at gøre sådan?

Det virker ikke hos mig.. :(

Object reference not set to an instance of an object.

Stack trace:
[NullReferenceException: Object reference not set to an instance of an object.]
  SharedStuff.fixpage(String strSubmenu, Page& Page) in ****\App_Code\SharedStuff.vb:10
  omvinklen.Page_Load(Object sender, EventArgs e) in ****\omvinklen.aspx.vb:10
  System.Web.UI.Control.OnLoad(EventArgs e) +99
  System.Web.UI.Control.LoadRecursive() +47
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
Avatar billede emkay Nybegynder
29. august 2007 - 20:46 #3
Hmm.. Ser lige at du har Shared på i din Sub.. Er det vigtigt? Det producerer bare en warning i min VWD...
Avatar billede neoman Novice
29. august 2007 - 20:49 #4
jeg kan slet ikke køre den UDEN shared - min VS spytter en fejl ud :)
Avatar billede neoman Novice
29. august 2007 - 20:52 #5
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ClassTest.aspx.vb" Inherits="ClassTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>

<body>
    <form id="form1" runat="server">
    <div>
       
<asp:panel runat="server" height="50px" width="125px" ID="pnlTest" Visible="true">
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
  </asp:panel> 
    </div>
    </form>
</body>
</html>

---------------------
Public Class Class1
    Public Shared Sub fixpage(ByRef Page As System.Web.UI.Page)

        Dim pnlTest As Panel = Page.FindControl("pnlTest")

        If Not pnlTest Is Nothing Then
            pnlTest.Visible = False
        End If

    End Sub
End Class

ovenstående funker hos mig
Avatar billede emkay Nybegynder
29. august 2007 - 20:53 #6
LOL.. Jeg kan ikke køre den med :D

Hvad har du ellers i hele Sub'en og hvordan kalder du den?
Avatar billede emkay Nybegynder
29. august 2007 - 20:54 #7
Min side ligger i en Masterpage.. Har det noget at sige?
Avatar billede neoman Novice
29. august 2007 - 21:00 #8
Tydeligvis - hvis jeg smider en master udenom, så holder det op med at virke ...
Avatar billede emkay Nybegynder
29. august 2007 - 21:07 #9
Ahh.. Så er det ikke mig der er helt sindssyg.. :oP Men hvordan får man det så til at virke med en masterpage?
Avatar billede neoman Novice
29. august 2007 - 21:17 #10
The  $ 64 000  question, hehe .. working on it
Avatar billede kalp Novice
29. august 2007 - 21:32 #11
emkay >> Hvis man arbejder med masterpages får elementerne under den en tilføjelse til deres ID.. hvis man skal have fat i dem via. det navn man selv har angivet skal man fortælle helt præcis hvilken kontrol man vil kigge i efter en anden kontrol.. f.eks


Dim pnlTest As Panel  = masterpageContentHolder.form1.FindControl("pnlTest")

hvis du vil have fat i en kontrol placeret på form1.
Avatar billede neoman Novice
29. august 2007 - 21:37 #12
Public Class Class1
    Public Shared Sub fixpage(ByVal Page As System.Web.UI.Page)
        Dim pnlTest As Panel = Page.Controls(0).FindControl("CPH1").FindControl("pnlTest")
        If Not pnlTest Is Nothing Then
            pnlTest.Visible = True
        End If
    End Sub
End Class
Avatar billede neoman Novice
29. august 2007 - 21:37 #13
Ovenstående virker, hvor min placeholder hedder CPH1 .. og jeg blev snigløbet af kalp til løsningen, hehe
Avatar billede kalp Novice
29. august 2007 - 21:41 #14
ovenstående er korrekt ja, men man kan som sagt også fjerne Controls(0) og angive navnet på den kontrol det drejer sig om..

Det mere læsevenligt:)
Avatar billede neoman Novice
29. august 2007 - 21:43 #15
Ih ja - men jeg famlede lidt i blinde ved at arbejde mig lidt op og ned ad træet, så det var det første skud jo :-)
Avatar billede emkay Nybegynder
29. august 2007 - 21:43 #16
Ja, jeg ville også mene at Controls(0) jo ikke nødvendigvis vælger den rigtige.. Men man kan ikke bare fjerne det..

kalp >> Du siger at man skal angive navnet på den kontrol det drejer sig om.. Hvad mener du der? Hvad skal der stå i stedet for Controls(0)?
Avatar billede neoman Novice
29. august 2007 - 21:50 #17
dette virker også :
Dim pnlTest As Panel = Page.Master.FindControl("CPH1").FindControl("pnlTest")
Avatar billede kalp Novice
29. august 2007 - 21:52 #18
emkay >>

Hvis du har en opbygning som denne..

<ContentHolder>
<form>
<panel> <label></label> </panel>
</form>
</ContentHolder>

og vi er i siden page load metode nu og vil have fat i elementet "label".

Der kan man angive stien til den på den måde

Dim label As Label = (Label)ContentHolder.FindControl("panel").FindControl("label")


Jeg MENER nok det er sådan man gør, men har ikke lige visual studio her ellers tager det 2 sekunder at teste:)

Det er ret nemt når først man forstår konceptet i det!
I starten gav det mig mange problemer, at den skulle lave om på mine ID'er osv.
men nu er det fint nok da jeg har forstået principperne i det.
Avatar billede emkay Nybegynder
29. august 2007 - 21:52 #19
Jæssør! Det virker sgu.. Syns I begge to har fortjent lidt point, så smid et svar :)
Avatar billede neoman Novice
29. august 2007 - 21:54 #20
tihi - så har jeg da også lært noget i dag :)
Avatar billede kalp Novice
29. august 2007 - 22:28 #21
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester