2012-05-10 43 views
12

如何将变量从asp.net传递到JavaScript?将变量从ASP.net传递到JavaScript

+0

你想做什么?一个例子可能有帮助吗? – Xharze

+1

无论您使用哪种方法,请记得使用'Microsoft.Security.Application.AntiXss.JavaScriptEncode'来编码您的字符串以使其更安全。 –

回答

4

您可以使用ASP.Net HiddenField。您只需在服务器上设置它的值,并在需要时通过javascript检索它。

Serverside集团

hdf_Test.Value = "yourValue"; 

HTML

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

的Javascript

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

在服务器端这段代码不起作用我试过字符串x; x.value = “d”;它给我错误? – user1363918

+0

这是因为您正在尝试使用不是HiddenField控件的变量。我用更多的信息更新了我的答案。 –

+0

我知道我参加派对的时间已经很晚了,但是这帮了我很大的忙。 – user2366842

12

有多种方式:

1 - 与<%= myVariable %>
2写出来在你的JavaScript - 设置cookie的服务器端,然后检索cookie的客户端
3 - 设置一个隐藏的表单输入您的值
4 - 将值重定向到页面作为查询字符串参数,然后使用JavaScript解析参数
5 - 构建所有JavaScript服务器端,保存到变量,然后写出变量client-侧。
6 - 获取与一个AJAX请求

+0

有趣我不知道选项1. :) + 1 –

+0

第一个选项导致VBScript运行时错误800a000d类型不匹配...至少当'myVariable'是一个经典的asp页面中的记录集变量时,比如'<%= rs(“myVariable”)%>' – Karapapas

21

价值创造背后

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

代码中的属性,然后在javascript

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

有趣的我对此不知道。 :) + 1 –

+1

非常感谢你.... – user1363918

0

在HTML:

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

在后面的代码:

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

AntiXss Library

2
  1. 使用JavaScript标签

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

  2. 使用隐藏域

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

在JS

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

3.Retrieve使用JSON

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

@var语法通过AJAX数据取决于您的视图引擎。这也许<%= VAR1%>

1

您可以在后面的代码使用:

公共字符串JSON;

你需要给它一个值

在JavaScript中,你可以输入:

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

如果你想要得到的字符串变量相当于在你的代码的一面,这是代码:

实施例:

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

类别代码:

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; 
    } 
} 
}