我正在尝试生成一个包含UNC路径作为查询字符串变量之一的URL。当用户单击ASP.NET按钮控件时,URL将在弹出窗口中打开。单击该按钮时,将从UNC路径中删除向后斜杠,从而导致页面中断。
该按钮在页面源文件中正确呈现所有反斜杠。
有没有办法阻止这种情况?
这是我的源代码:
代码背后:
string unc = @"\\myserver\myfolder\myfile.txt";
string url = string.Format("http://www.mysite.com/page.aspx?a={0}", unc);
MyButton.Attributes.Add("onclick", @"javascript:FullPop('" + url + @"')");
ASPX页面
<script language="javascript" type="text\javascript">
function FullPop(Newurl) {
Win = window.open( Newurl,"Monitor", "fullscreen=0,toolbar=1,location=1,directories=1,status=1,menubar=1,scrollbars=1,resizable=1,width=800,height=600,top=50,left=50");
Win.focus();
}
</script>
<asp:button id="MyButton" runat="server" cssclass="mycss" text="View Actual Target" />
更新
Server.UrlEncode不起作用。同样的行为。
更新1
根据Daniel Lew的回答,我开发了以下解决方案:
protected void Page_Load(object sender, EventArgs e)
{
string unc = @"\\myserver\myfolder\myfile.txt";
string url = string.Format("http://www.mysite.com/page.aspx?a={0}", unc);
MyButton.Attributes.Add("onclick", @"javascript:FullPop('" + this.EscapeforJavaScript(url) + @"')");
}
private string EscapeforJavaScript(string url)
{
return url.Replace(@"\", @"\\");
}
答案 0 :(得分:4)
您必须对您在网址中输入的值进行网址编码:
string url = "http://www.mysite.com/page.aspx?a=" + Server.UrlEncode(unc);
编辑:
要安全地将URL放在Javascript代码中,您还必须将字符串编码为文字字符串:
MyButton.Attributes.Add("onclick", @"FullPop('" + url.Replace(@"\", @"\\").Replace("'", @"\'") + @"')");
(javascript:协议仅在将Javascript用作链接的href时使用,而不是在将代码放入onclick等事件时使用。)
答案 1 :(得分:1)
我对asp.net一无所知,但是在通过模板化之前将文本直接添加到JavaScript中时,我遇到了一些问题。您是否尝试转义网址上的反斜杠,以避免这种情况?
// Returns "\myservermyfoldermyfile.txt", due to escpaing the backslash.
alert("\\myserver\myfolder\myfile.txt");
// Returns correct value of "\\myserver\myfolder\myfile.txt"
alert("\\\\myserver\\myfolder\\myfile.txt");
答案 2 :(得分:0)
您可能希望尝试使用以下方法对服务器端的字符串进行URLE编码:
public static string UrlFullEncode(string strUrl)
{
if (strUrl == null)
return "";
strUrl = System.Web.HttpUtility.UrlEncode(strUrl);
}
我不是百分之百确定它是否会取代反斜杠,但值得一试。