2012-05-10 12 views
12

Come passare una variabile da asp.net a JavaScript?Passa variabile da ASP.net a JavaScript

+0

Che cosa stai cercando di fare? Un esempio potrebbe essere utile? – Xharze

+1

qualsiasi metodo tu usi, ricorda di usare 'Microsoft.Security.Application.AntiXss.JavaScriptEncode' per codificare la tua stringa per renderla più sicura. –

risposta

4

È possibile utilizzare un campo nascosto ASP.Net. Basta impostare il suo valore sul server e recuperarlo tramite javascript quando ne hai bisogno.

Serverside

hdf_Test.Value = "yourValue"; 

HTML

<asp:HiddenField runat="server" ID="hdf_Test" /> 

Javascript

document.getElementById('hdf_Test').value 
+0

Nel lato sever questo codice non funziona. Ho provato la stringa x; x.Value = "d"; mi dà errore? – user1363918

+0

Questo perché si sta tentando di utilizzare una variabile non un controllo HiddenField. Ho aggiornato la mia risposta con ulteriori informazioni. –

+0

So che sono in ritardo per la festa, ma questo mi ha aiutato un po '. – user2366842

12

Ci sono un certo numero di modi :

1 - scriverlo nella tua JavaScript con <%= myVariable %>
2 - Impostare un server-side di cookie e quindi recuperare il lato client biscotto
3 - Impostare un modulo di input nascosto il tuo valore
4 - Reindirizza alla tua pagina con il valore come parametro querystring, quindi analizza i parametri utilizzando JavaScript
5 - Crea tutto il tuo JavaScript lato server, salva in una variabile, quindi scrivi la variabile client- lato.
6 - Recupera il valore con una richiesta AJAX

+0

Interessante non sapevo sull'opzione 1. :) + 1 –

+0

La prima opzione causa un errore di runtime di tipo 'VBScript '800a000d' ...Almeno quando 'myVariable' è una variabile recordset in una classica pagina asp, come '<% = rs (" myVariable ")%>' – Karapapas

21

Creare una proprietà nel codice dietro

protected string MyProperty { get { return "your value"; } } 

poi in javascript

var myValue = "<%= MyProperty %>"; 
+2

Interessante non lo sapevo. :) + 1 –

+1

Grazie mille .... – user1363918

0

In HTML:

<script type="text/javascript"> 
    alert(<%=Greetings()%>); 
</script> 

In codice sottostante:

protected string Greetings() 
{ 
    return Microsoft.Security.Application.AntiXss.JavaScriptEncode("Hello World!"); 
} 

AntiXss Library

2
  1. utilizzare JavaScript tag

    < script> var var1 = @var1;
    var var2 = @var2;
    < /script>

  2. Usa campo nascosto

< input type="hidden" value="@var1" id="h_var1"/>
< input type="hidden" value="@var2" id="h_var2" />

in js

$(function() 
{ 
    var var1 = $("#h_var1").val(); 
    var var2 = $("#h_var2").val(); 
} 

3.Retrieve dati tramite la tecnologia AJAX utilizzando JSON

var var1; 
var var2; 
    $.get(url,function(result) 
    { 
     var1 = result.var1; var2 = result.var2; 
    } 

sintassi @var dipendono del motore di visualizzazione. E 'forse <% = Var1%>

1

È possibile utilizzare questo nel codice dietro:

pubblico stringa JSON;

è necessario dare un valore

Nella tua JavaScript è possibile inserire:

<script> 
    var myVar = <%=json%>; 
</script> 
0

Se si desidera ottenere la stringa equivalente variabile nel codice lato, questo è il codice:

Esempio:

string jsString= JsEncoder.JavaScriptEncode("This is an example of C# string to be converted to javascript string",true)); 

Codice classe:

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Text; 

namespace stackoverlofw.JavascriptEncoder 
{ 
public class JsEncoder 
{ 
    /// <summary> 
    /// Empty string for Java Script context 
    /// </summary> 
    private const string JavaScriptEmptyString = "''"; 


    /// <summary> 
    /// Initializes character Html encoding array 
    /// </summary> 
    private static readonly char[][] SafeListCodes = InitializeSafeList(); 



    /// <summary> 
    /// Encodes input strings for use in JavaScript. 
    /// </summary> 
    /// <param name="input">String to be encoded.</param> 
    /// <param name="emitQuotes">value indicating whether or not to emit quotes. true = emit quote. false = no quote.</param> 
    /// <returns> 
    /// Encoded string for use in JavaScript and does not return the output with en quotes. 
    /// </returns> 
    /// <remarks> 
    /// This function encodes all but known safe characters. Characters are encoded using \xSINGLE_BYTE_HEX and \uDOUBLE_BYTE_HEX notation. 
    /// <newpara/> 
    /// Safe characters include: 
    /// <list type="table"> 
    /// <item><term>a-z</term><description>Lower case alphabet</description></item> 
    /// <item><term>A-Z</term><description>Upper case alphabet</description></item> 
    /// <item><term>0-9</term><description>Numbers</description></item> 
    /// <item><term>,</term><description>Comma</description></item> 
    /// <item><term>.</term><description>Period</description></item> 
    /// <item><term>-</term><description>Dash</description></item> 
    /// <item><term>_</term><description>Underscore</description></item> 
    /// <item><term> </term><description>Space</description></item> 
    /// <item><term> </term><description>Other International character ranges</description></item> 
    /// </list> 
    /// <newpara/> 
    /// Example inputs and encoded outputs: 
    /// <list type="table"> 
    /// <item><term>alert('XSS Attack!');</term><description>'alert\x28\x27XSS Attack\x21\x27\x29\x3b'</description></item> 
    /// <item><term>[email protected]</term><description>'user\x40contoso.com'</description></item> 
    /// <item><term>Anti-Cross Site Scripting Library</term><description>'Anti-Cross Site Scripting Library'</description></item> 
    /// </list> 
    /// </remarks> 
    public static string JavaScriptEncode(string input, bool emitQuotes) 
    { 
     // Input validation: empty or null string condition 
     if (string.IsNullOrEmpty(input)) 
     { 
      return emitQuotes ? JavaScriptEmptyString : string.Empty; 
     } 

     // Use a new char array. 
     int outputLength = 0; 
     int inputLength = input.Length; 
     char[] returnMe = new char[inputLength * 8]; // worst case length scenario 

     // First step is to start the encoding with an apostrophe if flag is true. 
     if (emitQuotes) 
     { 
      returnMe[outputLength++] = '\''; 
     } 

     for (int i = 0; i < inputLength; i++) 
     { 
      int currentCharacterAsInteger = input[i]; 
      char currentCharacter = input[i]; 
      if (SafeListCodes[currentCharacterAsInteger] != null || currentCharacterAsInteger == 92 || (currentCharacterAsInteger >= 123 && currentCharacterAsInteger <= 127)) 
      { 
       // character needs to be encoded 
       if (currentCharacterAsInteger >= 127) 
       { 
        returnMe[outputLength++] = '\\'; 
        returnMe[outputLength++] = 'u'; 
        string hex = ((int)currentCharacter).ToString("x", CultureInfo.InvariantCulture).PadLeft(4, '0'); 
        returnMe[outputLength++] = hex[0]; 
        returnMe[outputLength++] = hex[1]; 
        returnMe[outputLength++] = hex[2]; 
        returnMe[outputLength++] = hex[3]; 
       } 
       else 
       { 
        returnMe[outputLength++] = '\\'; 
        returnMe[outputLength++] = 'x'; 
        string hex = ((int)currentCharacter).ToString("x", CultureInfo.InvariantCulture).PadLeft(2, '0'); 
        returnMe[outputLength++] = hex[0]; 
        returnMe[outputLength++] = hex[1]; 
       } 
      } 
      else 
      { 
       // character does not need encoding 
       returnMe[outputLength++] = input[i]; 
      } 
     } 

     // Last step is to end the encoding with an apostrophe if flag is true. 
     if (emitQuotes) 
     { 
      returnMe[outputLength++] = '\''; 
     } 

     return new string(returnMe, 0, outputLength); 
    } 




    /// <summary> 
    /// Initializes the safe list. 
    /// </summary> 
    /// <returns>A two dimensional character array containing characters and their encoded values.</returns> 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "This is necessary complexity.")] 
    private static char[][] InitializeSafeList() 
    { 
     char[][] allCharacters = new char[65536][]; 
     for (int i = 0; i < allCharacters.Length; i++) 
     { 
      if (
       (i >= 97 && i <= 122) ||  // a-z 
       (i >= 65 && i <= 90) ||   // A-Z 
       (i >= 48 && i <= 57) ||   // 0-9 
       i == 32 ||      // space 
       i == 46 ||      // . 
       i == 44 ||      // , 
       i == 45 ||      // - 
       i == 95 ||      // _ 
       (i >= 256 && i <= 591) ||  // Latin,Extended-A,Latin Extended-B   
       (i >= 880 && i <= 2047) ||  // Greek and Coptic,Cyrillic,Cyrillic Supplement,Armenian,Hebrew,Arabic,Syriac,Arabic,Supplement,Thaana,NKo 
       (i >= 2304 && i <= 6319) ||  // Devanagari,Bengali,Gurmukhi,Gujarati,Oriya,Tamil,Telugu,Kannada,Malayalam,Sinhala,Thai,Lao,Tibetan,Myanmar,eorgian,Hangul Jamo,Ethiopic,Ethiopic Supplement,Cherokee,Unified Canadian Aboriginal Syllabics,Ogham,Runic,Tagalog,Hanunoo,Buhid,Tagbanwa,Khmer,Mongolian 
       (i >= 6400 && i <= 6687) ||  // Limbu, Tai Le, New Tai Lue, Khmer, Symbols, Buginese 
       (i >= 6912 && i <= 7039) ||  // Balinese   
       (i >= 7680 && i <= 8191) ||  // Latin Extended Additional, Greek Extended   
       (i >= 11264 && i <= 11743) || // Glagolitic, Latin Extended-C, Coptic, Georgian Supplement, Tifinagh, Ethiopic Extended  
       (i >= 12352 && i <= 12591) || // Hiragana, Katakana, Bopomofo  
       (i >= 12688 && i <= 12735) || // Kanbun, Bopomofo Extended   
       (i >= 12784 && i <= 12799) || // Katakana, Phonetic Extensions   
       (i >= 19968 && i <= 40899) || // Mixed japanese/chinese/korean 
       (i >= 40960 && i <= 42191) || // Yi Syllables, Yi Radicals   
       (i >= 42784 && i <= 43055) || // Latin Extended-D, Syloti, Nagri   
       (i >= 43072 && i <= 43135) || // Phags-pa   
       (i >= 44032 && i <= 55215) /* Hangul Syllables */) 
      { 
       allCharacters[i] = null; 
      } 
      else 
      { 
       string integerStringValue = i.ToString(CultureInfo.InvariantCulture); 
       int integerStringLength = integerStringValue.Length; 
       char[] thisChar = new char[integerStringLength]; 
       for (int j = 0; j < integerStringLength; j++) 
       { 
        thisChar[j] = integerStringValue[j]; 
       } 

       allCharacters[i] = thisChar; 
      } 
     } 

     return allCharacters; 
    } 
} 
} 
Problemi correlati