[ASP.NET]Best practice: bestanden bewerken op basis selectie

Pagina: 1
Acties:

  • Arethusa
  • Registratie: December 2003
  • Laatst online: 13-02 13:48

Arethusa

Niet die server

Topicstarter
Ik heb het volgende dilemma en hoop via dit topic enig inzicht te krijgen hoe ik het volgende het best kan aanpakken.

Op een aspx pagina heb ik een radiobuttonlist gevuld met een 5 tal talen. Het is de bedoeling dat de gebruiker 1 optie uit de lijst selecteerd waarna een bestand word bijgewerkt. Voorlopig zijn deze bestanden xml bestanden die reeds bestaan en een vast format hebben (later moet ik dezelfde actie doen om resource files te bewerken).

Ik laad die radiobuttonlist in de page_load dan gebruik ik een knop om een selectie te maken. Daarna wil ik via een andere knop het bestand bewerken (dus 2 eventhandlers)

Punt1: is het mogelijk om een dataset of source (dus de data) "globaal" te houden zodat die in het 2e event (de knop bestand bewerken) te gebruiken is om de data weer op te slaan?

Punt 2 Hoe pak ik dit opslaan aan. Maak ik 5 procedures/functies die op basis van die waarde een bewerking doen?
Dus (pseudocode):
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
if radiobuttonlist.selectedtext.item = nederlands then
voer actie nederland uit
end if

if radiobuttonlist.selectedtext.item = engels then
voer actie engels uit
end if

etc


Of maak ik 1 functie of procedure die op basis van selectie van de radiobuttonlist gevuld gaat worden en die op de een of andere manier het juiste bestand erbij pakt? Persoonlijk vind ik de 1e manier niet zo netjes omdat je dan veel dezelfde procedures krijgt waarbij maar 1 of 2 wijzingen zitten. Ik zou liever voor de 2e optie kiezen alleen weet ik niet waar ik op zoeken moet.

Heeft iemand tips of ideeen voor mij? Ik heb via google of GOT geen vergelijkbare tutorials of scripts gevonden en heb ik mijn vraag in jullie handen gelegd _/-\o_

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


Verwijderd

Punt 1: Je kunt dataset of source in de session of viewstate stoppen. Hangt een beetje af van de grootte of dat verstandig is. Anders zou je de gegevens gewoon opnieuw op moeten halen. Voorbeeld:
code:
1
2
Session["_data"] = <object>; //wegschrijven
object o = Session["_data"]; //ophalen

of
code:
1
2
ViewState["_data"] = <object>; //wegschrijven
object o = ViewState["_data"]; //ophalen


Punt 2: Hangt een beetje af van hoe generiek je acties zijn. Als alle acties ongeveer hetzelfde doen dan zou ik één aparte methode maken die op basis van een aantal parameters op basis van selectie het gebeuren uitvoert. Zijn ze echt geheel verschillend dan zou ik gaan voor 5 aparte methoden. Maar denk er dan alsnog over om generieke delen generiek te houden (dat scheelt onderhoud). Dus generieke delen in aparte methoden die je dan weer aan kan roepen vanuit elk van de 5 methoden.

[ Voor 6% gewijzigd door Verwijderd op 23-06-2006 13:20 ]


  • Arethusa
  • Registratie: December 2003
  • Laatst online: 13-02 13:48

Arethusa

Niet die server

Topicstarter
Verwijderd schreef op vrijdag 23 juni 2006 @ 13:19:
Punt 1: Je kunt dataset of source in de session of viewstate stoppen. Hangt een beetje af van de grootte of dat verstandig is. Anders zou je de gegevens gewoon opnieuw op moeten halen. Voorbeeld:
code:
1
2
Session["_data"] = <object>; //wegschrijven
object o = Session["_data"]; //ophalen

of
code:
1
2
ViewState["_data"] = <object>; //wegschrijven
object o = ViewState["_data"]; //ophalen


Punt 2: Hangt een beetje af van hoe generiek je acties zijn. Als alle acties ongeveer hetzelfde doen dan zou ik één aparte methode maken die op basis van een aantal parameters op basis van selectie het gebeuren uitvoert. Zijn ze echt geheel verschillend dan zou ik gaan voor 5 aparte methoden. Maar denk er dan alsnog over om generieke delen generiek te houden (dat scheelt onderhoud). Dus generieke delen in aparte methoden die je dan weer aan kan roepen vanuit elk van de 5 methoden.
Bedankt voor je reactie. Ondertussen had ik al iets gelezen over een session en een viewstate. Mijn vermoedens dat die bruikbaar zijn voor mijn zijn bevestigd. Mijn database bevat ong 1100 records, moet wel kunnen lijkt me.

Mijn acties zijn erg generiek. Ik selecteer elke keer in kolom uit de database met het id (dus id + kolomnaam) die kolomnaam verschilt, heb er dus 5. 1 methode maken is het handigst in dit geval. Echter schrijf ik dan per actie naar het bijbehorende bestand. Laten we zeggen dat ik de taal ned heb dan schrijf ik naar ned.xml. Dit zou misschien te koppelen zijn. Zou je misschien een voorbeeldje kunnen laten zien van de structuur die ik gebruiken kan?

[ Voor 5% gewijzigd door Arethusa op 23-06-2006 13:51 ]

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:55

gorgi_19

Kruimeltjes zijn weer op :9

1100 records zou ik niet in een clientside viewstate opslaan.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Gorgi heeft gelijk 1100 records is wel erg veel voor een viewstate. In een session is ook best wel veel. Je zou kunnen kijken of je de gegevens niet gewoon ophaalt als je eenmaal een selectie hebt gemaakt.

Wat betreft de structuur zou je de volgende methode kunnen definieren:

code:
1
2
3
4
5
6
7
8
private void WriteXml(string filename, string columnid)
{
   XmlDocument xmldoc = new XmlDocument();
   ...
   
   columnvalue = row[0][columnid + "_AColumnName"];
   xmldoc.Save(filename);
}


Aanroepen doe je dan alsvolgt
code:
1
WriteXml("ned.xml", "ned");

  • Arethusa
  • Registratie: December 2003
  • Laatst online: 13-02 13:48

Arethusa

Niet die server

Topicstarter
Verwijderd schreef op vrijdag 23 juni 2006 @ 15:04:
Gorgi heeft gelijk 1100 records is wel erg veel voor een viewstate. In een session is ook best wel veel. Je zou kunnen kijken of je de gegevens niet gewoon ophaalt als je eenmaal een selectie hebt gemaakt.

Wat betreft de structuur zou je de volgende methode kunnen definieren:

code:
1
2
3
4
5
6
7
8
private void WriteXml(string filename, string columnid)
{
   XmlDocument xmldoc = new XmlDocument();
   ...
   
   columnvalue = row[0][columnid + "_AColumnName"];
   xmldoc.Save(filename);
}


Aanroepen doe je dan alsvolgt
code:
1
WriteXml("ned.xml", "ned");
Hier kan ik wat mee bedankt. Ik zal ter zijner tijd als het project voltooid is de benodigde code online zetten. Misschien helpt het anderen nog. Wat het ophalen betrefd: Ik maak gebruik van een simpele query met een id en een variabele (die variabele haalt zijn input uit een textbox). Daarna laad ik alle ik alle data in een dataset.
Wat ik nog wel weten. Is er een bepaalde grootte te bepalen tot wanneer je iets in de viewstate of session zet? Of hangt dat af van een aantal factoren.

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:55

gorgi_19

Kruimeltjes zijn weer op :9

Wat ik nog wel weten. Is er een bepaalde grootte te bepalen tot wanneer je iets in de viewstate of session zet? Of hangt dat af van een aantal factoren.
Dat laatste. Grootte van een pagina, tijd actief op een pagina, geheugengebruik, etc.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Viewstate is in de praktijk met name handig voor zaken die heel erg pagina gerelateerd zijn. Zoals bijvoorbeeld jouw dataset. Ga je naar een nieuwe pagina dan ben je van die gegevens af.

Een session is gerelateerd aan een gebruiker. In de session kan je zaken kwijt die bijv. te maken hebben met een user account . De gegevens blijven beschikbaar tot dat de sessie van een gebruiker verloopt. Default is dat 20 minuten na de laatste request van de gebruiker. Gegevens die in de sessie staan zijn dus alleen beschikbaar voor de gebruiker die is gerelateerd aan de sessie.

Naast de session heb je ook nog de application sessie. Gegevens die daarin worden geplaatst zijn beschikbaar voor alle gebruikers. Gegevens blijven beschikbaar 20 minuten na het verloop van de laatste sessie. Bij drukbezochte websites verlopen deze gegevens dus nooit.

Je moet echter bij alle drie goed opletten. Een grote viewstate betekend dat de gebruiker een grote pagina moet laden. Een grote sessie/application sessie betekend dat de server qua geheugen flink belast kan worden. Hou het bij voorkeur klein, zeker bij drukke websites.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:55

gorgi_19

Kruimeltjes zijn weer op :9

Naast de session heb je ook nog de application sessie. Gegevens die daarin worden geplaatst zijn beschikbaar voor alle gebruikers. Gegevens blijven beschikbaar 20 minuten na het verloop van de laatste sessie. Bij drukbezochte websites verlopen deze gegevens dus nooit.
Hoe kom je er bij dat die zouden verlopen? :? Alleen bij een application restart moet je ze opnieuw laden.

Je vergeet trouwens HttpRuntime.Cache en HttpContext te noemen in je verhaal :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Arethusa
  • Registratie: December 2003
  • Laatst online: 13-02 13:48

Arethusa

Niet die server

Topicstarter
Verwijderd schreef op vrijdag 23 juni 2006 @ 15:04:
Gorgi heeft gelijk 1100 records is wel erg veel voor een viewstate. In een session is ook best wel veel. Je zou kunnen kijken of je de gegevens niet gewoon ophaalt als je eenmaal een selectie hebt gemaakt.

Wat betreft de structuur zou je de volgende methode kunnen definieren:

code:
1
2
3
4
5
6
7
8
private void WriteXml(string filename, string columnid)
{
   XmlDocument xmldoc = new XmlDocument();
   ...
   
   columnvalue = row[0][columnid + "_AColumnName"];
   xmldoc.Save(filename);
}


Aanroepen doe je dan alsvolgt
code:
1
WriteXml("ned.xml", "ned");
Zou je een kleine uitleg kunnen geven over deze regel code:
code:
1
columnvalue = row[0][columnid + "_AColumnName"];


Ik programmeer in vb en ik zie daar c# code. Mijn idee is dat je hier een waar de vul op basis van de rij (selecteditem) van de radiobuttonlist en de naam van het bestand waar de xml moet komen? Het grootste gedeelte van je code kan ik lezen alleen met die regel heb ik wat moeite.

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


Verwijderd

gorgi_19 schreef op vrijdag 23 juni 2006 @ 22:02:
[...]

Hoe kom je er bij dat die zouden verlopen? :? Alleen bij een application restart moet je ze opnieuw laden.

Je vergeet trouwens HttpRuntime.Cache en HttpContext te noemen in je verhaal :)
Applicatiesessie verloopt als de laatste sessie is verlopen. Bij sites waar min. 1 bezoeker per 20 minuten aanwezig is zal deze inderdaad niet verlopen.

...en bedankt voor je aanvulling, wat betreft cache en context heb je gelijk.

[ Voor 9% gewijzigd door Verwijderd op 29-06-2006 13:30 ]


Verwijderd

Sieweshaoao schreef op dinsdag 27 juni 2006 @ 14:24:
[...]


Zou je een kleine uitleg kunnen geven over deze regel code:
code:
1
columnvalue = row[0][columnid + "_AColumnName"];


Ik programmeer in vb en ik zie daar c# code. Mijn idee is dat je hier een waar de vul op basis van de rij (selecteditem) van de radiobuttonlist en de naam van het bestand waar de xml moet komen? Het grootste gedeelte van je code kan ik lezen alleen met die regel heb ik wat moeite.
Het komt er op neer dat je in dit voorbeeld uit regel 1 van je tabel (= row[0]) het veld "ned_AColumnName" uitleest.
Pagina: 1