2011-05-30 27 views
0

Request.QueryString包含路徑 例如。 TEMP \文件#hashName.jpg哈希特殊字符在IFRAME中不起作用

protected void Page_Load(object sender, EventArgs e) 
{ 
string filePath = Request.QueryString["fileName"]; 
iframes.Attributes.Add("src", filePath); 
} 

它書房去的地方,我甲肝寫JavaScript代碼

function ViewFile(filePath) { 
    var width = 800; 
    var height = 450; 
    var left = (screen.width/2) - (width/2); 
    var top = (screen.height/2) - (height/2); 
    window.open('ViewFile.aspx?fileName=' + filePath, 'CustomPopUp', 'width=' + width + ', height=' + height + ',toolbar=no,menubar=no,directories=no,resizable=yes,scrollbars=yes,location=no,top=' + top + ',left=' + left); 
    return false; 
} 

但是當我運行,它讓我看到(在新窗口中)的標記 「的資源無法找到「。 說明:HTTP 404.您正在查找的資源(或其某個依賴項)可能已被刪除,名稱已更改或暫時不可用。請檢查以下網址並確保它拼寫正確。

請求的URL:/ Temp/file 只要遇到HASH,就會破壞路徑...我使用Server.URLEncode和HttpUtility.UrlEncode();其轉換/和#到相應的值... bt顯示消息

HTTP錯誤400 - 錯誤的請求。

Javascript Escape()EncodeURI()和EncodeURI組件也不工作。 我該怎麼辦才能逃避#? iframe是否接受URL中的#值?請通過此指導我。

親切的問候, Hardik

+0

如何使用替換函數,如filePath = filePath.replace(/ \#/ ig,「」); – Max 2011-05-30 07:24:15

+0

Hi Max!感謝您的回覆..保存時間它存儲d文件名##只有當在新窗口中查看它給這個問題...儘管我會嘗試它,讓你知道 – Hardik 2011-05-30 07:39:30

回答

0

哪裏ViewFile js函數獲得輸入文件路徑?問題可能與此有關。如果文件路徑有#中,那麼你可以使用encodeURIComponent

'ViewFile.aspx?fileName=' + encodeURIComponent(filePath) 

然而,會有問題,如果filePath值函數是不正確的,因爲其他地方的編碼問題(例如IFrame的源)。每當你在URL/QueryString中使用#時,它可能會導致一個問題 - 所以你應該嘗試在將它分配給IFrame源時將其轉義。

+0

嗨Vinay!非常感謝回覆!你是對的。 IFRAME源中存在問題。 ViewFile js函數在獲取文件路徑後從代碼後面調用。在調試時,它顯示正確的路徑,例如Temp // file#hashname.jpg。沒有#的其他文件正在正確查看(即使文件名稱爲file.dotName .jpg正確查看)。只有帶#的文件出現問題。 如何在Iframe源中轉義#? iframe的源代碼在 後面的代碼中分配string filePath = Request.QueryString [「fileName」]; iframes.Attributes.Add(「src」,filePath); – Hardik 2011-05-30 09:41:05

+0

@ user775829,嘗試使用'HttpServerUtility.UrlEncode'對url進行編碼,然後將其作爲源屬性添加到iframe中。 – VinayC 2011-05-31 04:57:05