2010-04-26 11 views
7

Ich habe den folgenden Code, die ich auf eine Variable "t" in Javascript zurückkehren wollen:Access-Variable aus dem Code hinter via Javascript

-Code hinter:

Public Shared Function GetSomeText() As String 
    Dim result = "This is from code behind" 
    Return result 
End Function 

Caller Variable in javascript:

Also, wie kann ich machen Variable "t" bekommen das "Ergebnis" von Funktion GetSomeText von Code-Behind?

Vielen Dank.

+2

Durch die Art und Weise verwenden, das ist _Javascript_, nicht jQuery – SLaks

Antwort

12

Versuchen Sie dies - vorausgesetzt, dass dies eine öffentliche Methode auf der Seite ist. Dies ruft die Methode GetSomeText() für die Seitenklasse auf und führt dann eine Response.Write() der Daten auf der Seite aus, während sie gerendert wird. Das Ergebnis sollte zwischen den einzelnen Anführungszeichen in Ihrem Javascript enden.

var t = '<%= GetSomeText() %>'; 
+0

Dank al. ot. Dieser hat es geschafft. – Narazana

+0

Dies ist ein Sicherheitsloch. – SLaks

+2

@SLaks - Ich würde sagen, dass es darauf ankommt, was die Methode zurückgibt. Wenn der Text benutzergeneriert ist, muss er unbedingt ordnungsgemäß maskiert werden. Wenn das Programm Text unter der Kontrolle des Programmierers erzeugt, ist es wahrscheinlich nicht. Natürlich ist die Kodierung von benutzergenerierten Daten erforderlich. – tvanfosson

2

Sie müssen die Zeichenfolge in eine Javascript-Variable in serverseitigen Code zu schreiben, wie folgt aus: (In einem <script> Block in der ASPX-Seite)

var t = "<%= GetSomeText() %>"; 

Beachten Sie, dass Sie must richtig entfliehen sie, wie folgt aus: (oder die AntiXSS Toolkit

public static void QuoteString(this string value, StringBuilder b) { 
    if (String.IsNullOrEmpty(value)) 
     return ""; 

    var b = new StringBuilder(); 
    int startIndex = 0; 
    int count = 0; 
    for (int i = 0; i < value.Length; i++) { 
     char c = value[i]; 

     // Append the unhandled characters (that do not require special treament) 
     // to the string builder when special characters are detected. 
     if (c == '\r' || c == '\t' || c == '\"' || c == '\'' || c == '<' || c == '>' || 
      c == '\\' || c == '\n' || c == '\b' || c == '\f' || c < ' ') { 
      if (b == null) { 
       b = new StringBuilder(value.Length + 5); 
      } 

      if (count > 0) { 
       b.Append(value, startIndex, count); 
      } 

      startIndex = i + 1; 
      count = 0; 
     } 

     switch (c) { 
      case '\r': 
       b.Append("\\r"); 
       break; 
      case '\t': 
       b.Append("\\t"); 
       break; 
      case '\"': 
       b.Append("\\\""); 
       break; 
      case '\\': 
       b.Append("\\\\"); 
       break; 
      case '\n': 
       b.Append("\\n"); 
       break; 
      case '\b': 
       b.Append("\\b"); 
       break; 
      case '\f': 
       b.Append("\\f"); 
       break; 
      case '\'': 
      case '>': 
      case '<': 
       AppendCharAsUnicode(b, c); 
       break; 
      default: 
       if (c < ' ') { 
        AppendCharAsUnicode(b, c); 
       } else { 
        count++; 
       } 
       break; 
     } 
    } 

    if (b == null) { 
     b.Append(value); 
    } 

    if (count > 0) { 
     b.Append(value, startIndex, count); 
    } 

    return b.ToString(); 
} 
+0

Nice one. Aber es ist ein bisschen lang. – Narazana

+0

Arbeitete für mich, versuchte einen Verzeichnispfad zu übergeben. Dies ist der einzige Weg, dies zu tun. AppendCharAsUnicode-Methode hier gefunden: http://www.dotnetframework.org/default.aspx/DotNET/DotNET/[email protected]/untmp/Orcas/RTM/ndp/fx/src/xsp/System/Web/Extensions/ Skript/Serialisierung/JavaScriptString @ cs/1/JavaScriptString @ cs – Amicable

Verwandte Themen