Send data fra javascript i postback til C#

Tags:    c# asp.net javascript

<< < 12 > >>
Hej drenge.

Jeg har et javascript som er følgende
Fold kodeboks ind/udJScript kode 


Scriptet i sig selv virker helt fint.
Mit spørglsmål er. Hvordan kan jeg lave et postback til codebehind, med værdierne som scriptet henter?

Jeg skal bruge disse værdier til at rette width på nogle tabeller jeg har. Så de passer til browser vinduet i forskellige størrelser.

Tak på forhånd.



13 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
Jeg tænkte også først det samme som Brian, men gik så ud fra at der var en eller anden specifik grund til at Cristian ville justere tabellens bredde.

Anyway, når du insisterer på at generere din tabel i CodeBehind, fremfor at databinde som er det mest almindelige i ASP.NET, så kan du give din tabel et ID via dens ClientID property. Det ID kan du så bruge i JavaScript til at justere tabellens bredde. Noget i den her stil burde fungere:

document.getElementById("myTable").width = 300;

Alternativt via style i stedet, hvis det passer dig bedre:

document.getElementById("tblTest").style.width = "200px";


Mvh.

Kasper (TSW)



Indlæg senest redigeret d. 17.04.2012 16:04 af Bruger #1
Hej Cristian,

Øh, du skal vel ikke rette bredden på tabellerne i CodeBehind? Ændringen vil du jo alligevel ikke kunne se før der rent faktisk laves et postback og siden renderes igen. Det vil give noget mere mening at ændre bredden på den allerede renderede tabel via JavaScript, altså på klienten :). Det er til gengæld ret let at gøre, specielt hvis du bruger fx jQuery.

Mvh.

Kasper (TSW)



Indlæg senest redigeret d. 17.04.2012 11:03 af Bruger #1
Hej Cristian,

>Hej Kasper. Jeg ved desværre ikke hvordan man laver databind. Hvis du har et link ville jeg meget gerne læse det.

Google efter det. Repeateren er fx en glimrende control hvis du gerne vil have meget alsidighed. Ellers er der DataGrid, som er lidt mindre alsidig, men som til gengæld giver dig en masse funktionalitet når du vil lave tabeller med fx sortering, paging osv. Google fx "asp.net repeater databinding" osv. så skulle du hurtigt kunne lære noget om det :)

>Men tabellerne skal jo helst gerne rettes til efter browserens størrelse. Grundet mit javascript til at hente browser størrelsen. Hvordan kan man gøre det?

Ved at erstatte det tal jeg har hardcodet (300/"200px") med den pågældende værdi fra din JavaScript kode - det troede jeg var åbenlyst :)

>Samtidig er jeg stadig nysgerrig i hvordan man kan sende mine data fra mit javascript til codebehind koden i et postback. Og gribe den data som bliver postet back.

Det gør du via et asynkront kald. Det kan sagtens gøres med almindelig JavaScript, men du skal tage hensyn til diverse browsere og selv håndtere returkoder osv. Det er både bedre og lettere at bruge fx jQuery, hvor du kan bruge fx post() metoden til at sende værdier. Med den vil du kunne lave et AJAX kald med en enkelt linje kode.

Jeg frygter dog lidt at du tror at når du har sendt værdien til CodeBehind og derefter retter bredden på din tabel, så vil den straks blive opdateret - det er IKKE tilfældet. Grunden til det er netop at det er asynkront og at du derved går uden om de almindelige events der sørger for at rendere din ASP.NET side. Du vil med andre ord ikke kunne se nogen som helst ændringer på din side, ligegyldigt hvad du foretager dig i din CodeBehind fra et AJAX kald, men du vil kunne tage værdien og fx gemme den i en database, hvis det interesserer dig.

Mvh.

Kasper (TSW)



Indlæg senest redigeret d. 18.04.2012 09:27 af Bruger #1
Helt enig i Kaspers svar!
Du behøver slet ikke at tilgå din CodeBehind for at ændre i bredden når du allerede ændre den i din JavaScript?



Ja i codebehind. Jeg jeg opretter mine tabeller om noget der minder om.

Fold kodeboks ind/udCSharp kode 


Og derefter tilføjer dem.

Og jeg har desværre ingen anelse om hvordan jeg skulle rette disse tabellers størrelser til i HTML via et javascript.



Indlæg senest redigeret d. 17.04.2012 12:00 af Bruger #16700
@Christian
Hvordan får du dit output af tabellerne ind i din html? Jeg er ikke så stærk i .net igen til at kunne oprette tabeller på den måde ;)



Du kunne også bruge % angivelser i din c# kode fra begyndelsen. Så slipper du for at tænke mere over det.



@Brian.
Du kunne også bruge % angivelser i din c# kode fra begyndelsen. Så slipper du for at tænke mere over det.


Ja det har jeg også prøvet. Med unit.percentage i stedet for unit.pixel hvor jeg siger (6%).
Men hvis jeg så på mine tekst felter siger at de også skal være 6% store. Så får tabeller og tekstbokse forskellige størrelser selvom at de begge bliver sat til 6% :p

Derfor er jeg nu nået til at jeg skal have browserens størrelse og derefter rette størrelserne til for de forskellige elementer, til at få en ens størrelser.

@Daniel.
Hvordan får du dit output af tabellerne ind i din html?

I bunden siger jeg
cell1.Text = "Tekst";
cell2.Text = "Tekst";
cell3.Text = "Tekst";

og for at få tilføjet tabellen til siden
form1.controls.add(tabel); //i en foreach løkke.

And so on :p. I mit tilfælde henter jeg informationer fra get/set metoder, som får deres data fra en mssql database.

når du insisterer på at generere din tabel i CodeBehind, fremfor at databinde som er det mest almindelige i ASP.NET, så kan du give din tabel et ID via dens ClientID property. Det ID kan du så bruge i JavaScript til at justere tabellens bredde. Noget i den her stil burde fungere:

document.getElementById("myTable").width = 300;

Alternativt via style i stedet, hvis det passer dig bedre:

document.getElementById("tblTest").style.width = "200px";


Hej Kasper. Jeg ved desværre ikke hvordan man laver databind. Hvis du har et link ville jeg meget gerne læse det. Men tabellerne skal jo helst gerne rettes til efter browserens størrelse. Grundet mit javascript til at hente browser størrelsen. Hvordan kan man gøre det?

Samtidig er jeg stadig nysgerrig i hvordan man kan sende mine data fra mit javascript til codebehind koden i et postback. Og gribe den data som bliver postet back.



Indlæg senest redigeret d. 18.04.2012 08:50 af Bruger #16700
@Kasper

Skal det forstås på den måde at man opretter en template i sin HTML side, som indeholder sin tabel struktur med det antal celler man skal bruge.

Hvorefter man kalder sin database, henter de data man skal bruge og midlertidig gemmer dem i en form for variable.

Derefter looper man så igennem denne variable og tilføjer data til sin template. Og så til sidst tilføjer man ens tabeller til sin side.



@Kasper

Skal det forstås på den måde at man opretter en template i sin HTML side, som indeholder sin tabel struktur med det antal celler man skal bruge.

Hvorefter man kalder sin database, henter de data man skal bruge og midlertidig gemmer dem i en form for variable.

Derefter looper man så igennem denne variable og tilføjer data til sin template. Og så til sidst tilføjer man ens tabeller til sin side.


Nej ikke helt. Første del er rigtig. Du laver netop en template i din .aspx fil. I din CodeBehind henter du så dataene ud som du normalt gør, fx til en liste eller en DataReader eller stort set hvad som helst som kan itereres igennem, og så sætter du DataSource på din control. Har du fx en Repeater, kunne det se sådan her ud:

Fold kodeboks ind/udCSharp kode 



Mvh.

Kasper (TSW)



<< < 12 > >>
t