Laden...

Werte von externen Javascript an ASPX übergeben

Erstellt von Leonie96 vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.189 Views
L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren
Werte von externen Javascript an ASPX übergeben

Hey Leute,

ich versuche aktuell Werte aus meinem externen .js file meiner aspx Seite hinzuzufügen.
Sprich beispielsweise eine definierte Variable im js (var jsvariable=1)
Diese Variable möchte ich nun z.B. in meiner aspx darstellen.

Versuch:
externes javatest.js file:


function SetPostbackValues() {
  var hiddenControl = '<%= hiddenControl.ClientID %>';
  document.getElementById(hiddenControl).value = 500; 

}

aspx:

 <script type="text/javascript" src="javatest.js"> </script>
 <input id="hiddenControl" type="hidden" runat="server" />

aspx.cs

 var hiddenValue = hiddenControl.Value;
            Label1.Text = hiddenValue;

Würde mich über eure Hilfe sehr freuen.

Liebe Grüße,

Leonie

T
2.219 Beiträge seit 2008
vor 5 Jahren

Du musst an deine Funktion die ID des Controls mitgeben lassen.
In einer externen JS Datei können keine ASP .NET Controls aufgelöst werden, da diese immer zu einer Seite gehören!
Deine SetPostBackValues Funktion gehört entweder direkt in die Seite embedded oder du musst die Control ID an die Funktion übergeben, wenn du die Funktion auch auf anderen Seiten brauchst.

Externe JS Datei:


function SetPostbackValues(hiddenControl ) {
  document.getElementById(hiddenControl).value = 500;
}

Aufruf auf deiner Seite:


SetPostbackValues('<%= hiddenControl.ClientID %>');

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hey Hey,

erstmal vielen Dank für deine Antwort.
Aber irgendwie will es immer noch nicht so Recht.

Also ich habe es wie folgt gemacht:

.aspx

 <input id="hiddenControl" type="hidden" runat="server" />

 <script type="text/javascript" src="extern.js"> </script>
    <script>
      
        SetPostbackValues('<%= hiddenControl.ClientID %>');

    </script>

aspx.cs

 protected void Page_Load(object sender, EventArgs e)
        {
            TextBox2.Text =hiddenControl.Value;

        }

externes .js

 function SetPostbackValues(hiddenControl ) {
  document.getElementById(hiddenControl).value = 500;
        }

Also Ziel ist es, dass ich festgelegte Variablen (denen Werte zugewiesen sind) aus dem externen .js file in meiner aspx.cs Seite zur Verfügung habe und damit weiter arbeiten kann.
Beispielsweise in einer Textbox darstellen.

Aber wo ist denn dort nun mein Fehler ?

Würde mich nochmal um Hilfe freuen.

Liebe Grüße, Leonie

T
2.219 Beiträge seit 2008
vor 5 Jahren

Wie wird den der Postback ausgelöst?
Durch einen Button klick o.ä.?
Ohne einen Postback, können deine Client Seitigen Control Werte auch im Server nicht bekannt sein.
Und vermutlich wird hier das Problem liegen oder?

Was ist den eigentlich das Ziel dabei?
Ggf. ist dein Ansatz auch anders lösbar.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Würde das gerne ohne Button machen. Das dachte ich mir schon fast.

Also ich lese Werte aus der Console aus. Das funktioniert auch soweit schon.
Sprich ich übergebe die beiden Werte greeting meiner aspx Seite. Diese Werte werden in Überschriften aktuell dargestellt.

Da liegt auch das Problem. Ich möchte diese Werte in meiner aspx.cs verwenden. Um diese z.B. in eine DB zu schreiben oder in einem Textfeld darzustellen.
Also ich möchte nun greeting0 und greeting1 auch in der .cs verwenden können 😕
Beispiel: TextBox2.Text =greeting0;

aktueller Stand:
externes .js:


function log(data){
   console.log(data);
    document.getElementById('greeting0').innerHTML = greeting0; 
    document.getElementById('greeting1').innerHTML = greeting1;
    
   return data;
}
var greeting0;
var greeting1;

.aspx

 <h1 id="greeting0" runat="server"></h1>
  <h1 id="greeting1"></h1>

Liebe Grüße, Leonie

T
2.219 Beiträge seit 2008
vor 5 Jahren

Ohne Postback kann dies aber nicht funktionieren.
Das ASP .NET ist die Server Seite und JS ist hier die Client Seite.
Der Server kann erst die Änderungen, also die aktuellen Werte der Controls, erfahren wenn du einen Postback machst.
Dies kannst du zwar auch über die entsprechende JS Funktion triggern, dies muss aber über ein Server Control wie einen Button passieren.
Erst dann werden die aktuellen Formulardaten an den Server gesendet.
Dann kannst du auch auf Server Seite, also in deiner aspx.cs, die aktuellen Werte aus den Controls auslesen.

Dies gehört aus meiner Sicht aber schon zum Grundwissen von ASP .NET und auch von JS.
Falls dir dies nicht ganz klar ist, solltest du dich nochmal in das Thema einlesen um zu verstehen, wie ASP .NET an dieser Stelle einzuordnen ist und warum deine Umsetzung nicht so einfach zu lösen ist wie du es gerne hättest.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Guten Morgen,

ok verstehe ich. Vielen Dank für die gute Erklärung.
Aber es funktioniert ja, das ich meine aktuell gewünschten Werte in den Überschriften mit den id´s greeting0 und greeting1 darstelle. Diese Werte muss ich ja nur irgendwie nun in meiner .cs verwenden können.

Sprich es ist so, dass wenn ich auf ein Bild klicke immer die aktuelle ,,Klickposition" in den Überschriften auf der .aspx angezeigt bekomme. Das funktioniert ja soweit.
Gibt es denn dann keine Möglichkeit die entsprechenden aktuellen Wert der id´s greeting0 und greeting1, die sich auf der aspx Seite befinden, in der .cs zu verwenden.

Bsp.:(Wunsch) in .cs
greeting1.value;

oder in .aspx:
den Wert der id´s einer Variable zuordnen und für .cs verfügbar machen

Da muss es doch bestimmt irgendwas geben ? 😕

Liebe Grüße,

Leonie

T
2.219 Beiträge seit 2008
vor 5 Jahren

Kannst du, wenn du dem h1 Tag einfach noch ein runat="server" mit gibst.
Dann kennt der Server auch dein h1 Tag als HtmlGenericControl und kann damit auch arbeiten.
Dann kannst du z.B. mit greetings1.InnerHtml darauf zugreifen.
Dies dürfte dann die beste Lösung sein.

Aber wie gesagt, muss immer ein Postback passieren, damit der Server die aktuellen Werte kennt.
Beim Postback bekommt der Server dann den ViewState der Seite vom Client gesendet, der die codierten aktuellen Zustände der Controls enthält.
Aus diesem werden dann nach dem validieren, man will ja nicht einfach ungültigen oder gar manipulierten ViewState verarbeiten, dann die ganzen Werte entnommen und sind dann auf der Server Seite bekannt.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hey Hey,

Zugriff habe ich ja bereits.
Aber mit greetings1.InnerHTML bekomme ich ja nicht den aktuellen Wert übergeben 😕

Denn ich brauche in .cs den Wert von greeting1.

TextBox2.Text = greeting1.InnerHtml;

Wunsch:

TextBox2.Text = greeting1.Value;

Gibt es dafür keine Lösung ? 😕

Liebe Grüße, Leonie

T
2.219 Beiträge seit 2008
vor 5 Jahren

Was sagt den der Debugger?
Welcher Wert steht ggf. in greetings1.InnerText?

Value gibt es nicht als Eigenschaft von HtmlGenericControl.
Schau dir bitte dazu mal die Doku an.

Hast du auch geschaut ob IsPostback auf true steht?
Wenn nicht, ist klar das dann dein Text wieder weg sein kann.
Aber hier musst du dich mal durch den Code debuggen.
Auch wäre noch zu klären wie du nun den Postback machst.
Kommt dieser per Button klickt?

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

L
Leonie96 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hey hey,

erstmal vielen Dank für deine Tipps. Habe das nun mit einem Button realisiert.

Allerdings habe ich aktuell das Problem, dass ich aus meiner URL, die wie folgt aufgebaut ist:

https://meineseite.com/default/#1/1234_2.JPG

Diesen Teil: 1234_2.JPG benötige.

Diesen Wert lege ich in der aspx wie folgt fest:

var dasbild = location.hash.replace("#", "");

Die Variable dasbild beinhaltet meine benötigte Komponente.
Aber auch hier ist wieder das Problem, dass ich diese nicht in der .cs verwenden kann, da ich keinen Zugriff ohne ein Postback erlange. Diese Variable muss mir aber beim Laden der Seite zur Verfügung stehen.

Versuche über Current.Request etc. waren leider auch erfolglos.

string url = HttpContext.Current.Request.Url.AbsoluteUri;

Eine weitere Idee war, dass ich den Wert erst in die Console schreibe und diesen dann in der .cs auslese.
console.log(dasbild) und das wäre der defaultwert 91, der dann entsprechend 1234_2.JPG wäre.
Aber auch dort keinen Erfolg.

Hat zufällig noch jemand eine Idee, wie ich die Variable dasbild bzw. 1234_2.JPG aus der Url in meiner .cs verwenden kann ?

Vielleicht gibt es ja auch irgendwie die Möglichkeit den postback in der page_load auszulösen ?

Dazu habe ich folgendes gefunden aber komme damit allerdings nicht klar 😕

Link für Trigger Postback on Code-Behind

Würde mich über Hilfe sehr sehr freuen.

Liebe Grüße,
Leonie 😃

1.696 Beiträge seit 2006
vor 5 Jahren

Leonie96, du weißt, dass # in URL ein Anker markiert? D.h. der Browser sucht den Anker in HTML-Attribute und verschiebt den Inhalt im Fenster zu dem Anker, spricht, die Seite wird nicht neugeladen und somit bekommst du serverseitig keinen Request!

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::