2010-04-26 48 views
7

Tôi có đoạn code sau đây mà tôi muốn trở lại một biến "t" trong javascript:Truy cập biến từ mã đằng sau thông qua javascript

Mã đằng sau:

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

Caller biến trong javascript:

//This is not working like that, I think 
    var t = GetSomeText(); 

Vì vậy, làm cách nào để biến "t" biến "kết quả" từ Hàm GetSomeText từ mã-đằng sau?

Cảm ơn bạn.

+2

Nhân tiện, đó là _Javascript_, không phải jQuery. – SLaks

Trả lời

12

Hãy thử điều này - giả sử rằng đây là phương pháp công khai trên trang. Điều này sẽ gọi phương thức GetSomeText() trên lớp trang và sau đó thực hiện một Response.Write() của dữ liệu cho trang khi nó được hiển thị. Kết quả sẽ kết thúc giữa các dấu nháy đơn trong javascript của bạn.

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

Cảm ơn bạn ot. Điều này đã làm các trick. – Narazana

+0

Đây là lỗ hổng bảo mật. – SLaks

+2

@SLaks - Tôi sẽ nói rằng nó phụ thuộc vào phương thức trả về. Nếu văn bản được tạo bởi người dùng thì chắc chắn nó cần phải được thoát đúng cách. Nếu chương trình đang tạo văn bản dưới sự kiểm soát của lập trình viên thì có lẽ nó không phải là. Chắc chắn mã hóa bất kỳ dữ liệu do người dùng tạo nào là bắt buộc. – tvanfosson

2

Bạn cần phải viết các chuỗi cho một biến javascript trong mã server-side, như thế này: (Trong một khối <script> trong trang ASPX)

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

Lưu ý rằng bạn phải một cách chính xác thoát khỏi nó, như thế này: (Hoặc sử dụng số 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

Đẹp nhất. Nhưng đó là một chút dài. – Narazana

+0

Làm việc cho tôi, đang cố gắng vượt qua một đường dẫn thư mục. Đây là cách duy nhất để làm điều đó. Phương pháp AppendCharAsUnicode được tìm thấy tại đây: http://www.dotnetframework.org/default.aspx/DotNET/DotNET/[email protected]/untmp/Orcas/RTM/ndp/fx/src/xsp/System/Web/Extensions/ Tập lệnh/Tuần tự hóa/JavaScriptString @ cs/1/JavaScriptString @ cs – Amicable

Các vấn đề liên quan