我遇到的问题是关于在服务器上生成的文件,.NET代码正在调用Javascript方法将文件下载到客户端,但如果文件名有撇号,则会失败(')。
例如:
如果ExportExcelFileName = "C:\HereIsMyFile.xls"
它工作正常。
但是,如果
ExportExcelFileName = "C:\Here'sMyFile.xls"
它会导致无法评估异常。
我尝试添加[.Replace("'", "\\'")]
和[.Replace("'", "%27")]
,但没有运气......
string script = string.Format("DownLoadFile('{0}')", e.Result.ExportExcelFileName).Replace('\\', '/');
HtmlPage.Window.Eval(script);
答案 0 :(得分:1)
我明白了:
当我尝试这个时:
string script = string.Format("DownLoadFile('{0}')", e.Result.ExportExcelFileName).Replace('\\', '/').Replace("'", "\\'");
HtmlPage.Window.Eval(script);
它还替换了DownloadFile('{0}')的javascript命令中的单引号。
所以我先简单地做了替换:
var escapedFileName = ((e.Result.ExportExcelFileName).Replace('\\', '/')).Replace("'", "\\'");
string script = string.Format("DownLoadFile('{0}')", escapedFileName);
HtmlPage.Window.Eval(script);
答案 1 :(得分:0)
像这样的简单方法会起作用吗?
private static string quoteReplace(string psString)
{
return psString.Replace("'", "");
}
答案 2 :(得分:0)
尝试使用URI转义作为文件名:
Uri.EscapeDataString(filePathHere);
。请参阅Uri.EscapeDataString on MSDN。
另见:If filename has single quote C# javascript does not get executed