静态方法的奇怪行为

时间:2010-05-07 19:42:58

标签: c# asp.net javascript

我加载了一个像这样的js变量:

var message = '<%= CAnunturi.CPLATA_RAMBURS_INFO %>';

我把静态字符串CPLATA_RAMBURS_INFO放在哪里:

public static string CPLATA_RAMBURS_INFO = "test";

我在这种方法中使用得非常好。

 <script type="text/javascript">
    var categoryParam = '<%= CQueryStringParameters.CATEGORY %>';
    var subcategoryParam = '<%= CQueryStringParameters.SUBCATEGORY1_ID %>';
    var message = '<%= CAnunturi.CPLATA_RAMBURS_INFO %>';

    function timedInfo(header) {
        $.jGrowl(message, { header: header });
    };
</script>

所以消息出现。

我不是,为什么,iso“iso”,如果我从静态方法中获取值, 使用消息js var不再成功(消息不再出现)。

public static string CPLATA_RAMBURS_INFO = getRambursInfo();

public static string getRambursInfo()
{
   return System.IO.File.ReadAllText(PathsUtil.getRambursPlataFilePath());
}

编辑: 源代码:

<script type="text/javascript">
    var categoryParam = 'category';
    var subcategoryParam = 'subcategory1Id';
    var message = 'Lorem ipsum dolor sit amet, eu curabitur venenatis 

viverra pellentesque tortor tempor, n est est suspendisse,aenean vestibulum, 在dictum nulla暂停eget metus aenean。 在luctus,neque porttitor suscipit nibh,aenean ut,commodo velit leo volutpat ullamcorper。 “;

    function timedInfo(header) {
        $.jGrowl(message, { header: header });
    };
</script>

2 个答案:

答案 0 :(得分:2)

您的文件包含特殊字符(可能是换行符或'),导致呈现的Javascript包含语法错误。

您需要使用Anti-XSS Toolkit转义字符串,如下所示:

var message = '<%= AntiXss.JavaScriptEncode(CAnunturi.CPLATA_RAMBURS_INFO) %>';

编辑:如果AntiXss无效,请尝试以下功能:

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

答案 1 :(得分:0)

尝试在Page_Load()函数中为变量赋值。我认为它会起作用。