Avatar billede Kim Neesgaard Seniormester
13. januar 2022 - 16:13 Der er 6 kommentarer og
1 løsning

Overførsel af en Javascript variabel værdi til .NET codebehind

Nu har jeg søgt Google tynd og det ser ikke ud til, at der er nogen direkte måde at gøre dette på. Jeg har fundet et forslag her:
https://www.codeproject.com/Questions/708697/Pass-javascript-variables-value-to-Csharp-code-beh

og det beskriver en måde:

<u>Opret et hidden-felt på HTML-siden:</u>
<asp:HiddenField ID="hdnfldVariable" runat="server" />

<u<Indfør dette JavaScript på tag-siden:</u>
<script type="text/javascript">
        var somefunction = function () {
            var hdnfldVariable = document.getElementById('hdnfldVariable');
            hdnfldVariable.value = 'value from javascript';
        }
    </script>

<u>Og aflæs værdien i codebehind:</u>
string variable = hdnfldVariable.Value;  (C#) eller
Dim variable As String = hdnfldVariable.Value  (VB)

Problem: 'variable' er tom, nbår jeg kører det, hvor jeg har indsat en fast værdi for  'value from javascript'.

Hvad kan være galt?
Avatar billede arne_v Ekspert
14. januar 2022 - 02:57 #1
Du er opmærksom på rækkefølgen?

1) .NET kode kører server side første gang
2) JavaScript kører client side
3) .NET kode kører server side ved post back
Avatar billede Kim Neesgaard Seniormester
15. januar 2022 - 17:09 #2
arne_v ->
Tak fordi du henleder min opmærksomhed på dette! Det er umiddelbart to ting galt:

1/ Jeg havde sat aflæsningen i Protected Sub Page_Load og dette duer ikke af grunden, som du skriver.
2/ Jeg kan se, at det skal være:
document.getElementById('<%=hdnfldvariable.ClientID%>').value
i stedet for det, jeg havde skrevet - ref. https://social.msdn.microsoft.com/Forums/en-US/ddb90b56-e414-4934-bffc-c9e37887b670/how-to-access-java-script-variables-at-code-behind-in-c?forum=asphtmlcssjavascript/3. indlæg

Så dette kan jeg få til at fungere (hiddenfield placeret som før) sådan her:

java script:
<script type="text/javascript">
  var x = 'Test af variabel'
  document.getElementById('<%=hdnfldvariable.ClientID%>').value = x;
</script>

Codebehind:
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  Dim variable As String = hdnfldvariable.Value
  Label1.Text = variable
End Sub

men hvis jeg laver det som et JS funktionskald, så går det galt (Er altså ikke så god til JS):

function test99() {
  var x = 'Test af variabel'
  document.getElementById('<%=hdnfldvariable.ClientID%>').value = x;
}

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  Page.ClientScript.RegisterStartupScript(Me.GetType(), "CurrentLocation", "test99();", True)
  Dim variable As String = hdnfldvariable.Value
  Label1.Text = variable
End Sub

Det virker stadig ikke, hvis jeg også har en anden knap til at udføre en postback.

Håber du kan bringe mig videre for jeg har godt nok brugt meget tid på problemet?
Avatar billede arne_v Ekspert
29. januar 2022 - 21:00 #3
Jeg tror stadig at det er sekvensen mellem client og server aktiviteter som driller.

Jeg tror at du skal prøve at trace aktiviteterne med tidstempel minimum 1/1000 sekund granulartitet og se flowet.

Måske er det indlysende hvad problemet er når du kender flowet.
Avatar billede softspot Forsker
19. februar 2022 - 13:20 #4
Har du husket at tjekke for IsPostback i Page_Load, ellers risikerer du at overskrive værdien i dit skjulte felt inden Button_Click eventet.

Hvis IsPostback er true, skal du ikke initialisere værdien af det skjulte felt.
Avatar billede Kim Neesgaard Seniormester
14. april 2022 - 14:15 #5
arne_v -> jeg mener, at jeg brugte en ASP.NET labelkontrol i første gang som et hidden field. Hvos jeg derimod bruger et HTML tag:

<input id="hidValue" readonly="true" color="Black" runat="server" style="font-family: Verdana; font-size: 12px; width: 325px; height: 25px;"  />

så virker det upåklageligt.

Kan det være så simpelt?

softspot -> ja - jeg bruger:
IsPostback i Page_Load
Avatar billede arne_v Ekspert
15. april 2022 - 03:32 #6
Hvis det virker med HTML men ikke med ASP.NET tag så har det noget med ASP.NET life cycle at gøre.
Avatar billede Kim Neesgaard Seniormester
13. september 2022 - 14:53 #7
Jeg er endt med at bruge et HTML inputfelt, da det virker hver gang. Har efterprøvet flere gange med et ASP.NET tag og her virker det ikke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester