Toon posts:

[ASP.net]controlstate veranderen in repeater

Pagina: 1
Acties:

Onderwerpen


  • Wartodust
  • Registratie: Juli 2011
  • Laatst online: 03-10-2011
hallo,

ik heb een repeater die alle artikels krijgt uit een sql database met een ObjectDataSource genoemd dsGetArticles.Wat ik wil bereiken is wanneer iemand op een artikel klikt (adhv een < a href>) verander ik de datasource naar dsGetArticle en rebind() , dat werkt.

Nu als ik gechecked hebt of de gebruiker ingelogd is of niet, moet ik bepaalde functionaliteit toevoegen of verwijderen.Zolang ik mijn ObjectDataSource niet verander kan ik mijn Panel (s) .Visible op true of false zetten maar eens ik de DS verander lukt dat niet meer,hij gaat over zijn code maar de panels die ik op Visible = false zet, blijven zichtbaar....

hierbij een vb van mijn code:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if (!IsPostBack)
            {
                if (Request.QueryString["articleID"] != null)
                {
                    repArticles.DataSourceID = "dsGetArticle";
                }
                else
                {
                    repArticles.DataSourceID = "dsGetArticles";
                }
                repArticles.DataBind();
            }
            if (!User.Identity.IsAuthenticated)
            {
                foreach (RepeaterItem ri in repArticles.Items)
                {
                    Panel pnlArticleFunctions = ri.FindControl("pnlArticleFunctions") as Panel;
                    pnlArticleFunctions.Visible = false;
                }
            }


alle tips zijn welkom

groetjes,

Nick

[Voor 0% gewijzigd door BtM909 op 04-07-2011 18:52]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:42

gorgi_19

Kruimeltjes zijn weer op :9

Eenvoudiger is het om via de querystring te werken, heb je ook niet het gezeur met geschift grote viewstates en gezeur met je controlcollection.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Wartodust
  • Registratie: Juli 2011
  • Laatst online: 03-10-2011
Is het mogelijk om daar een voorbeeld van te geven?

Acties:
  • 0Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 16-05 22:53
Gebruik het OnItemCreated event van de Repeater i.p.v. met de hand door de collectie RepeaterItems heen te lopen. Op het moment dat jij deze collectie opvraagt om er over heen te itereren kan het namelijk zo zijn dat deze nog helemaal niet gevuld is met de items behorende bij de nieuwe data binding. Je bent dan feitelijk bezig de zichtbaarheid van de oude items te veranderen, waarna de oude items weggegooid worden en vervangen door nieuwe, welke standaard weer zichtbaar zijn.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void Page_Init()
{
  repArticles.ItemCreated += repArticles_ItemCreated;
};

public void Page_Load()
{
  if (!IsPostBack)
  {
    if (Request.QueryString["articleID"] != null)
    {
      repArticles.DataSourceID = "dsGetArticle";
    }
    else
    {
      repArticles.DataSourceID = "dsGetArticles";
    }
    repArticles.DataBind();
  }
}

private void repArticles_ItemCreated(Object sender, RepeaterItemEventArgs e)
{
  Panel pnlArticleFunctions = e.Item.FindControl("pnlArticleFunctions") as Panel;
  if (pnlArticleFunctions != null)
  {
    pnlArticleFunctions.Visible = User.Identity.IsAuthenticated;
  }
}



Verder is het veel slimmer om ViewState uit te schakelen en je Repeater op ongeacht welke request te rebinden met altijd de correcte data (die desgewenst uit een cache komt). Op de langere termijn zal dat je een heleboel van dit soort hoofdpijn besparen.

Acties:
  • 0Henk 'm!

  • Wartodust
  • Registratie: Juli 2011
  • Laatst online: 03-10-2011
Bedank R4gnaxt ! Eindelijk een oplossing voor mijn probleem :)


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee