繁体   English   中英

为什么与ScriptManager.RegisterStartupScript一起使用时脚本中的反斜杠会被删除

[英]Why is backslash in script being removed when used with ScriptManager.RegisterStartupScript

我有这个C#代码,它为在某个目录中找到的每个文件生成1个启动脚本:

foreach (System.IO.FileInfo item in _imageAddress.GetFiles())
{
    db.insertXmlNode("SliderInformation", "SliderImageAddress", "..\\Uploades\\Img\\" + item.Name + ",", "Name", counter++.ToString());
    ScriptManager.RegisterStartupScript(this, this.GetType(), "script", @"loadNewPic('..\Uploades\Img\'" + item.Name + ",');", true);
}

这是Javascript代码:

function loadNewPic(picName) {
    $.ajax({
        type: "GET",
        url: "../Static/Css/xml/data.xml",
        dataType: "xml",
        success: function (xml) {
            console.log("NAME:   " + picName)
            $(xml).find('SliderInformation').each(function () {
                _name = $(this).find('SliderImageAddress:contains(' + picName + ')').text();
                console.log(_name);
            });

            var k = 0;
            for (var i = 0; i < listToAray(_name, ",").length; i++) {
                setTimeout(function () { 
                    $("#image-holder")
                        .append("<img src='" + listToAray(_name, ",")[k] + "' width='80' height='80' />")
                        .fadeIn('slow'); k++; 
                }, 300 * i);
            }
        }
    });
}

function listToAray(fullString, separator) {
    var fullArray = [];
    if (fullString !== undefined) {
        if (fullString.indexOf(separator) == -1) {
            fullAray.push(fullString);
        } else {
            fullArray = fullString.split(separator);
            fullArray.pop(-1)
        }
    }

    return fullArray;
}

即使生成的脚本调用带有反斜杠的loadNewPic 当我将picName输出到浏览器控制台时, 我也获得了没有反斜杠的值

我得到这个: ..UploadesImg'Hydrangeas.jpg

但我想检索此: ..\\Uploades\\Img\\Hydrangeas.jpg

为什么反斜杠被删除?

编写包含字符串的脚本(服务器端)时,需要使用HttpUtility.JavaScriptStringEncode对该字符串进行HttpUtility.JavaScriptStringEncode

请尝试以下方法:

foreach (System.IO.FileInfo item in _imageAddress.GetFiles())
{
    ...
    var pathToImageEncoded = HttpUtility.JavaScriptStringEncode("..\Uploades\Img\" + item.Name);
    var scriptToLoadPic = string.Format("loadNewPic('{0}');", pathToImageEncoded);
    ScriptManager.RegisterStartupScript(this, this.GetType(), "script", scriptToLoadPic, true);
}

因为它是在迭代字符串。 \\是控制字符,您需要使用反斜杠\\\\对其进行转义。

(旁注:您的问题对于您要提出的问题而言过于复杂-不断缩减并缩减,直到获得最小的片段来证明问题为止。-这也可能有助于您解决问题。)

编辑:请参阅下面的评论-目前尚不清楚您在哪里看到问题,您的值也在javascript中的杂乱字符串中使用,很可能是由javascript进行了插值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM