2009-05-04 34 views
3

我正在尝试生成一个包含作为查询字符串变量之一的UNC路径的URL。当用户点击ASP.NET按钮控件时,该URL将在弹出窗口中打开。当点击按钮时,反斜杠将从UNC路径中移除,导致页面中断。为什么从查询字符串中删除反斜线 - ASP.NET&Javascript

该按钮在页面源文件中正确呈现所有反斜线。

有什么办法可以防止这种情况发生?

这里是我的源代码:

后面的代码:

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

根据丹尼尔·路易斯的回答,我制定了以下解决方案:

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(@"\", @"\\"); 
} 

回答

4

你必须URL编码你把URL值:

string url = "http://www.mysite.com/page.aspx?a=" + Server.UrlEncode(unc); 

编辑:
为了安全地把网址中的Javascript代码,你也必须为字符串编码作为一个字符串:

MyButton.Attributes.Add("onclick", @"FullPop('" + url.Replace(@"\", @"\\").Replace("'", @"\'") + @"')"); 

(JavaScript的:当使用JavaScript作为HREF的链接协议只使用,而不是当你把代码样的onclick事件)

+0

然后urlDecode;) – 2009-05-04 21:46:24

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"); 
+0

我认为你有正确的想法。我只需要弄清楚它是如何在代码中。 – 2009-05-04 22:09:05

0

你可能想尝试URL编码在你的服务器端的字符串,使用下面的方法:

public static string UrlFullEncode(string strUrl) 
{ 
    if (strUrl == null) 
     return ""; 
    strUrl = System.Web.HttpUtility.UrlEncode(strUrl); 
} 

我不知道它100%,如果将取代反斜线,但值得一试。