通过Javascript在代码后端访问变量

8

我有以下代码,希望能将其赋值给JavaScript变量"t":

代码如下:

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

JavaScript中的调用者变量:

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

那么,我该如何使变量“t”从后端代码中的GetSomeText函数获取“result”?谢谢。

2
顺便说一下,那是JavaScript,不是jQuery。 - SLaks
2个回答

12
尝试这样做--假设这是页面上的公共方法。这将调用页面类上的 GetSomeText() 方法,然后在呈现时通过 Response.Write() 将数据写入页面。结果应该位于您的javascript中的单引号之间。
 var t = '<%= GetSomeText() %>';

2
@SLaks -- 我认为这取决于方法返回的内容。如果文本是用户生成的,则必须正确转义。如果程序在程序员的控制下生成文本,则可能不需要。当然,对任何用户生成的数据进行编码是必需的。 - tvanfosson

2
你需要在服务器端代码中将字符串写入JavaScript变量,就像这样:(在ASPX页面的<script>块中)
var t = "<%= GetSomeText() %>";

请注意,您必须正确转义它,就像这样:(或使用 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();
}

不错。但是有点长。 - Narazana
对我有用,我试图传递一个目录路径。这是唯一的方法。在此处找到AppendCharAsUnicode方法: http://www.dotnetframework.org/default.aspx/DotNET/DotNET/8@0/untmp/Orcas/RTM/ndp/fx/src/xsp/System/Web/Extensions/Script/Serialization/JavaScriptString@cs/1/JavaScriptString@cs - Amicable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接