Toon posts:

[ASP.NET] WebPart Delete

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi allemaal,

In de CMS-gedeelte van mijn website ben ik bezig met een dynamisch stuk content die ik op basis van Web Parts en Web Part Zones wil maken. Het lukt mij om de web parts in de web part zone toe te voegen. Bij het verwijderen van de web parts, worden ze in eerste instantie van de pagina verwijderd. Als ik een nieuwe web part ga toevoegen, zie ik het oude nog staan. Het schijnt dat deze web parts ergens in de sessie of view state zijn aangemaakt en daar blijven hangen. Weet iemand hoe ik de dynamisch aangemaakte web parts kan verwijderen?

Mijn code:

in mijn Page_Load functie van de pagina:
code:
1
2
3
4
5
            If (Not IsPostBack) Then
                For Each wp As WebPart In Me.ContentZone.WebParts
                    Me.WebPartManager1.DeleteWebPart(wp)
                Next
            End If


In het stukje waar ik de web parts dynamisch toevoeg:
code:
1
2
3
4
5
        Dim lC As Control = Me.LoadControl("Controls/MyControl.ascx")
        lC.ID = New Guid().ToString()

        Dim lWP As WebPart = Me.WebPartManager1.CreateWebPart(lC)
        Me.WebPartManager1.AddWebPart(lWP, Me.ContentZone, 0)


Dus als de pagina gewoon wordt geladen, moeten alle webparts worden verwijderd. Bij een PostBack, mag de lijst blijven staan en verder worden gevuld met web parts. Het probleem is dus het verwijderen van de webparts. Bij geen PostBack worden ze netjes weggehaald van de pagina, maar zodra ik een nieuwe ga toevoegen, zijn de oude dus beschikbaar. Ik denk dat het ergens in de sessie of view state zit. Het verijwderen en toevoegen van WebPart objecten doe ik via de manager.

Alvast bedankt.

Acties:
  • 0 Henk 'm!

Verwijderd

Wanneer voeg je ze toe dan? En waarom wil je ze verwijderen op de page_load van je pagina?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 02 december 2008 @ 14:43:
Wanneer voeg je ze toe dan? En waarom wil je ze verwijderen op de page_load van je pagina?
Ik woeg ze toe tijdens een druk op de knop.

Code:
code:
1
2
3
4
5
6
7
    Protected Sub BtnAddControl_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnAddControl.Click
        Dim lC As Control = Me.LoadControl("Controls/MyControl.ascx")
        lC.ID = New Guid().ToString()

        Dim lWP As WebPart = Me.WebPartManager1.CreateWebPart(lC)
        Me.WebPartManager1.AddWebPart(lWP, Me.ContentZone, 0)
    End Sub


Bij Page_Load of een ander event, wil ik ze verwijderen uit de lijst. Dat wil ik alleen doen bij een PostBack event. Het probleem is dat als ik naar mn pagina editor.aspx?Id=15 ga en een aantal controls ga toevoegen in de web part zone en vervolgens naar pagina editor.aspx?Id=16 ga, zie ik dezelfde webparts omdat de webpart zone waarschijnlijk deze vanuit een sessie of viewstate ophaalt. Dit is mijn vermoeden.

Ik wil ze dus bij het gewoon laden van de pagina, helemaal verwijderen (alle webparts). Daarna wil ik de web part zone vullen met gegevens. Maar het verwijderen van de webparts lukt niet zoals het hoort. Ik kan ze tijdelijk van de pagina verwijderen, maar zodra ik een nieuwe probeer toe te voegen met de Add knop, krijg ik alle oude weer te zien, terwijl ik duidelijk de Delete functie van de manager heb aangeroepen. Deze voert de pagina ook uit doordat in de For Each loop zoals aangegeven in mn vorige post.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heeft het misschien dan te maken met de Personalization instellingen voor de web?

Ik kwam het volgende tegen:
"You cannot delete a shared Web Part in personal view, therefore if you have permission, switch to shared view and then delete it. However, if you are already in shared view, add Page View=Shared&contents=1."

Als ik Personalization op Enabled = False zet dan krijg ik een Exception:

"Personalization is not enabled and/or modifiable. The Enabled property must be set to true, and a registered personalization provider must be selected. The current user must be granted the right to modify personalization state."

Misschien heeft het probleem hiermee te maken? Bij type personalization kan ik Shared en User instellen. Ik zal nog wat daarmee uitproberen...

[ Voor 41% gewijzigd door Verwijderd op 02-12-2008 15:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb net geprobeerd maar bij mij werkt het prima. Dit is de code die ik ervoor heb gebruikt. Misschien moet je voor het ID geen GUID gebruiken.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        protected void Button1_Click(object sender, EventArgs e)
        {
            WebPartManager mgr = WebPartManager1;
            democontrol ctrl = (democontrol)LoadControl("democontrol.ascx");
            ctrl.ID = "cal1";
            GenericWebPart calWebPart = mgr.CreateWebPart(ctrl);
            
            mgr.AddWebPart(calWebPart, WebPartZone1, 0);

        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            if (WebPartZone1.WebParts.Count > 0)
            {
                foreach (WebPart wp in WebPartZone1.WebParts)
                {
                    WebPartManager1.DeleteWebPart(wp);
                }
            }
        }

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 02 december 2008 @ 15:36:
Ik heb net geprobeerd maar bij mij werkt het prima. Dit is de code die ik ervoor heb gebruikt. Misschien moet je voor het ID geen GUID gebruiken.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        protected void Button1_Click(object sender, EventArgs e)
        {
            WebPartManager mgr = WebPartManager1;
            democontrol ctrl = (democontrol)LoadControl("democontrol.ascx");
            ctrl.ID = "cal1";
            GenericWebPart calWebPart = mgr.CreateWebPart(ctrl);
            
            mgr.AddWebPart(calWebPart, WebPartZone1, 0);

        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            if (WebPartZone1.WebParts.Count > 0)
            {
                foreach (WebPart wp in WebPartZone1.WebParts)
                {
                    WebPartManager1.DeleteWebPart(wp);
                }
            }
        }
Bedankt voor je reactie. Het werkt inderdaad wel. Maar ik ben er nog niet... Het heeft trouwens niets met Guid te maken. Werkt ook met GUID.

Ik denk dat het probleem in de PostBack stukje zit. Ik zal kijken of ik een RaisePostBackEvent kan regelen zodat de web parts bij het laden van de pagina ook worden verwijderd. Ze worden netjes verwijderd als ik een knop maak die de verwijder functie aantroept. Maar bij het laden van de pagina bij geen PostBack, zijn ze nog opgeslagen. Als je nog wat suggesties hebt, dan hoor ik het graag.

Misschien dat ik de verwijder functie niet bij Page_Load moet aanroepen maar bij een ander event?
Pagina: 1