webForumDet fria alternativet

accessa property på sida ifrån usercontrol

.NET

8 svar · 521 visningar · startad av Andreas L

Medlem sedan sep. 2000215 inlägg
Frågan#1

Jag har spanat runt en del på nätet och letat efter ett enkelt sätt att komma åt propertys i en sida, ifrån en usercontrol placerad på sidan.
De exempel jag har hittat beskriver det såhär i usercontrollen, typ :

   1:  'VB.NET
   2:  Dim pageTitle As String = Nothing
   3:  If TypeOf (Page) Is SamplePage Then
   4:     pageTitle = CType(Page, SamplePage).Title
   5:  Else
   6:     pageTitle = "unknown"
   7:  End If

(från code project )

Men detta verkar inte fungera under asp.net 2.0
-Vilket är det "enkla" sättet att göra detta i asp.net 2.0 (VB)??? Detta borde vara vanligt.

Medlem sedan dec. 19996 721 inlägg
#2

Andreas L skrev:

Men detta verkar inte fungera under asp.net 2.0

På vilket sätt fungerar det inte? Koden ser rätt ut, även om det är onödigt att typomvandla till SamplePage. Title-egenskapen finns ju där ändå.

Andreas L skrev:

-Vilket är det "enkla" sättet att göra detta i asp.net 2.0 (VB)??? Detta borde vara vanligt.

Nej, det är inte särskilt vanligt. En usercontrol bör vara tämligen isolerad, så att påverka den underliggande sidan är inte helt uppskattat.

Medlem sedan sep. 2000215 inlägg
#3

emission skrev:

På vilket sätt fungerar det inte? Koden ser rätt ut, även om det är onödigt att typomvandla till SamplePage. Title-egenskapen finns ju där ändå.

Jo, det är sant, title finns ju ändå. Men om jag skapar en ny sida med namnet (classnamnet) SamplePage, med en publik property "testprop" så känner inte usercontrollen igen "SamplePage" när jag provar nedanstående kod.

(webform)

Partial Class SamplePage
    Inherits System.Web.UI.Page
    Private _testProp As Integer
    Public Property TestProp() As Integer
        Get
            Return _testProp
        End Get
        Set(ByVal value As Integer)
            _testProp = value
        End Set
    End Property
End Class

(usercontrol)

Partial Class uc1
    Inherits System.Web.UI.UserControl
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim tp As Integer
        If TypeOf (Page) Is SamplePage Then
            tp = CType(Page, SamplePage).TestProp
        End If
    End Sub
End Class

"SamplePage is not defined" blir svaret, men detta ska tydligen fungera under .net 1.0

Medlem sedan dec. 19996 721 inlägg
#4

Det verkar som om du använder "Web Site" i ASP.NET 2.0. Inte det bästa Microsoft hittat på, men det går att kringgå. Det bästa är dock, tycker jag, att man väljer "Web Application" i stället (kräver SP1 av Visual Studio)
Problemet är att sidor (Page-klasserna) och kontroller i en Web Site inte har något med varandra att göra. De lever fristående liv och därför har inte "uc1" en aning om vad en "SamplePage" är. För att de ska få kontakt med varandra får man skapa en gemensam nämnare i mappen App_Code, gärna i form av ett interface.

I mappen App_Code:

Namespace MinWebSite
    Public Interface ISamplePage
        Property TestProp() As Integer
    End Interface
End Namespace

och modifieringar på de existerande filerna

Partial Class SamplePage
    Inherits System.Web.UI.Page
    [b]Implements MinWebSite.ISamplePage[/b]
    Private _testProp As Integer
    Public Property TestProp() As Integer [b]Implements MinWebSite.ISamplePage.TestProp[/b]
        Get
            Return _testProp
        End Get
        Set(ByVal value As Integer)
            _testProp = value
        End Set
    End Property
End Class
Partial Class uc1
    Inherits System.Web.UI.UserControl
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim tp As Integer
        If TypeOf (Page) Is [b]MinWebSite.ISamplePage[/b] Then
            tp = CType(Page, [b]MinWebSite.ISamplePage[/b]).TestProp
        End If
    End Sub
End Class
Medlem sedan juni 20019 024 inlägg
#5

För min del känns inte det här som rätt väg att gå. Varför behöver du komma åt innehåll från Page i din UserControl? En UserControl används ju för att bygga ut Page och återanvända kontroller, inte tvärtom.

Medlem sedan sep. 2000215 inlägg
#6

Emission, stort tack för en bra förklaring!

Pace, det är egentligen i första hand en fråga om att jag inte vill känna mig begränsad, och därför "vill veta". Det går bra att komma åt propertys i en masterpage ifrån en webform, och då känns det bra att veta hur jag kommunicerar mellan uc och page, om det dyker upp en sådan situation.

Ville inte lämna "testet" utan att ha fått ordning på det! :)

/tack!

Medlem sedan dec. 19996 721 inlägg
#7

Pace skrev:

För min del känns inte det här som rätt väg att gå. Varför behöver du komma åt innehåll från Page i din UserControl? En UserControl används ju för att bygga ut Page och återanvända kontroller, inte tvärtom.

Helt rätt. Det är definitivt inte att rekommendera att gå den här vägen. Det är bättre att sidan hämtar information från kontrollen, snarare än att kontrollen skjuter in information i sidan.

Medlem sedan juni 20019 024 inlägg
#8

Andreas L skrev:

Pace, det är egentligen i första hand en fråga om att jag inte vill känna mig begränsad, och därför "vill veta". Det går bra att komma åt propertys i en masterpage ifrån en webform, och då känns det bra att veta hur jag kommunicerar mellan uc och page, om det dyker upp en sådan situation.

Jämför med valfri metod på ett objekt. Du skickar in parametrar till metoden, metod(parameter), och får ett resultat tillbaka (exempelvis return true). Du ska inte låta instansen av objektet själv hämta det kallande objektet (i det här fallet Page) och försöka lägga in parametrar den vägen.

Som sagt, omvärdera ditt tankesätt eftersom det strider mot gällande normer för att bygga objektorienterade lösningar. Det kommer att skapa mer problem i framtiden än vad du löser för tillfället.

Medlem sedan dec. 19996 721 inlägg
#9

Andreas vill ju bara veta hur det gick till, och nu vet han dessutom att det inte är en bra idé. Dock kan man inte vara helt kategorisk. Det kan finnas lägen då det är fullständigt rimligt och korrekt att en kontroll kommunicerar med den underliggande, anropande sidan, och då behövs den nämnda tekniken.

263 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)