2009-05-04 2 views
3

쿼리 문자열 변수 중 하나 인 UNC 경로가 포함 된 URL을 생성하려고합니다. 사용자가 ASP.NET 버튼 컨트롤을 클릭하면 URL이 팝업 창에 열립니다. 단추를 클릭하면 뒤로 슬래시가 UNC 경로에서 제거되어 페이지가 끊어집니다.역 슬래시가 쿼리 문자열에서 제거되는 이유 - ASP.NET 및 Javascript

버튼은 모든 백 슬래시가있는 페이지 소스 파일에서 올바르게 렌더링됩니다.

이것을 방지 할 수있는 방법이 있습니까?

코드 뒤에 :

<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가 작동하지 않는

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 페이지

여기 내 소스 코드입니다. 같은 행동. 다니엘 루의 답변에 따라

업데이트 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); 

편집 :
안전하게 자바 스크립트 코드에서 URL을 넣어, 당신은 또한에 대한 문자열을 인코딩해야

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

(자바 스크립트 : 자바 스크립트가 링크 HREF로 사용되는 경우 프로토콜에만 사용됩니다, 당신이 코드를 삽입하지 리터럴 문자열 인 . 온 클릭과 같은 이벤트)

+0

그리고 urlDecode;) –

+0

대답에 따라 업데이트 된 질문 –

+0

@Deviant : 값은 이미 쿼리 문자열에서 읽을 때 디코드되므로 값을 읽을 때 추가 디코딩이 필요하지 않습니다. – Guffa

1

내가 asp.net에 대해 아무것도 몰라,하지만 난 문제 때와 경험이 템플리트를 사용하기 전에 JavaScript에 텍스트를 추가하십시오. 이것을 피하기 위해 url에서 백 슬래시를 이스케이프 처리해 보셨습니까?

// 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

나는 당신의 생각이 맞는 것 같아요. 코드에서 어떻게하는지 알아 내면됩니다. –

0

다음과 같은 방법을 사용하여 서버 측에 문자열에는 urlencoding 시도 할 수 있습니다 : 백 슬래시를 대체 할 경우 내가 그것을 100 % 확실하지 않다

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

을하지만, 시도해 볼 가치가 있습니다.

관련 문제