[英]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.