webForumDet fria alternativet

Hur skapa denna global?

.NET

6 svar · 302 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Detta funkar:

 Protected Overrides Sub OnInit(ByVal e As EventArgs)
        Dim [b]bc[/b] As HttpBrowserCapabilities = Request.Browser
        If [b]bc.Browser.Trim[/b] = "IE" Then
            'Ditt
        Else
            'Datt
        End If
    End Sub

men...
När jag vill göra så här:

Private [b]bc[/b] As HttpBrowserCapabilities
...

    Public Property ImageAlign() As String
        Get
            Return strImageAlign
        End Get
        Set(ByVal value As String)
            If [b][red]bc.Browser.Trim[/red][/b] = "IE" Then
                strImageAlign = " float:" & value & ";"
            Else
                strImageAlign = " align=""" & value & """"
            End If
        End Set
    End Property

...

Protected Overrides Sub OnInit(ByVal e As EventArgs)
        [b]bc[/b] = Request.Browser
        If [b]bc.Browser.Trim[/b] = "IE" Then
            'Ditt
        Else
            'Datt
        End If
    End Sub

Så får jag nullReference...något på rödad fet text. Vad felar?

Kan tillägga att detta är ifrån en user control

Medlem sedan jan. 20012 204 inlägg
#2

Du sätter aldrig

bc = Request.Browser;
Medlem sedan okt. 20041 556 inlägg
#3

Räcker det inte med att jag gör det i "onInit()"?
Om jag gör det "utanför" subben så får jag NullReferenceException då också.

Medlem sedan okt. 20041 556 inlägg
#4

Ok, man måste sätta det som du säger i varje property, fast det verkar vara lite jobbigt. Borde det inte gå att sätta det "globalt"?

    Public WriteOnly Property style() As String
        Set(ByVal value As String)
            bc = Request.Browser
            If bc.Browser.Trim = "IE" Then
                'ie
            Else
                'annan
            End If
        End Set
    End Property

 Public WriteOnly Property width() As String
        Set(ByVal value As String)
            bc = Request.Browser
            If bc.Browser.Trim = "IE" Then
                'ie
            Else
                'annan
            End If
        End Set
    End Property

 Public WriteOnly Property height() As String
        Set(ByVal value As String)
            bc = Request.Browser
            If bc.Browser.Trim = "IE" Then
                'ie
            Else
                'annan
            End If
        End Set
    End Property
'OSV.....

Det blir ju på en del ställen den måste fyllas/sättas...
Det måste ju finnas ett sätt för att slippa köra en request varje gång istället för att skapa en variabel....kan man tycka.

Det är ju inte så troligt att klienten byter browser åtta gånger medans sidan renderas. :)

Medlem sedan okt. 20041 556 inlägg
#5

Har nu lagt upp en UC här,
http://www.webforum.nu/showthread.php?t=132850
Fick inte till det allra sista men det får komma pöompö

Medlem sedan dec. 19996 721 inlägg
#6

Travoni skrev:

Ok, man måste sätta det som du säger i varje property, fast det verkar vara lite jobbigt. Borde det inte gå att sätta det "globalt"?
...
Det måste ju finnas ett sätt för att slippa köra en request varje gång istället för att skapa en variabel....kan man tycka.

Mer globalt än Request blir det inte, och det är ingen overhead att kolla via Request.Browser varje gång. Din kod borde dock fungera, förutsatt att Init körs innan du försöker komma åt ImageAlign. Ett vanligt mönster för att komma runt detta är att skapa en mellan-property.

Private bc As HttpBrowserCapabilities
...
Public Property ImageAlign() As String
        Get
            Return strImageAlign
        End Get
        Set(ByVal value As String)
            If Me.Browser.Browser.Trim = "IE" Then
                strImageAlign = " float:" & value & ";"
            Else
                strImageAlign = " align=""" & value & """"
            End If
        End Set
End Property

Private ReadOnly Property Browser As HttpBrowserCapabilities
    Get
        If bc is Nothing then bc=Request.Browser
        Return bc
    End Get
End Property

Men, som sagt, det är helt onödigt eftersom Request.Browser redan finns tillgänglig och fungerar likadant.

Medlem sedan okt. 20041 556 inlägg
#7

Oki, tack. Då blir det så. Jag gjorde dock en liten funktion för endamålet.

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)