2011-10-06 66 views
0

我有一個帶有按鈕的ASP.Net網站,它將文件路徑傳遞給執行ajax調用web方法的javascript函數。你看到被傳遞到下面的OpenDoc文件路徑是JSON.stringify的結果(\ FS01 \文件...)將文件路徑從Javascript傳遞到C#使用Ajax Web服務

<input type="button" id="b0" value="Open" onclick="openDoc('&quot;\\\\fs01\\Documents\\2011\\MEASEJA\\1108030203&nbsp;(1)&nbsp;10-3-2011&nbsp;Mart&nbsp;Cart&nbsp;Service&nbsp;Completion&nbsp;Survey.pdf&quot;');"> 

    function openDoc(filename) { 
    var xml = new XMLHttpRequest(); 
    xml.open("POST", "Default.aspx", true); 
    xml.onreadystatechange = function() { 
     if (xml.readyState == 4) { 
      if (xml.status == 200) { 
       $.ajax({ 
        type: "POST", 
        dataType: "json", 
        contentType: "application/json", 
        url: "Service.asmx/openDoc", 
        data: '{ file:' + filename + '}', 
        success: function() { }, 
        error: function (xml, status, error) { 
         var err = eval("(" + xml.responseText + ")"); 
         alert("Open Doc: " + xml.Message); 
        } 
       }); 
      } 
     } 
    } 
    xml.send(null); 
} 

[WebMethod] 
public byte[] openDoc(string file) 
{ 
    FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); 
    byte[] buffer; 

    try 
    { 
     int length = (int)fs.Length; 
     buffer = new byte[length]; 
     int count; 
     int sum = 0; 

     while ((count = fs.Read(buffer, sum, length - sum)) > 0) 
      sum += count; 
    } 
    catch (Exception ex) 
    { 
     throw (ex); 
    } 
    finally 
    { 
     fs.Close(); 
    } 

    return buffer; 
} 

問題是,沿途的某個地方,有事情發生到\文件中路徑和從ajax調用使用螢火蟲接收錯誤:

「無法識別的轉義序列(16):{file:」\ fs01 \ Documents \ 2011 \ MEASEJA \ 1108030203(1)10-3-2011 Mart Cart服務完成調查.pdf「}」

我知道在C#中必須加倍所有\,但這是文件路徑從按鈕單擊開始的方式。在某處,我失去了額外的功能,C#不能將它作爲文件處理。

回答

0

嘗試尋找一個反斜槓,如果需要

//pseudocode 
if (s.StartsWith(@"\f")) s.Prepend(@"\"); 
+0

之前,我把它作爲參數傳遞給阿賈克斯加倍? – jmease

+0

其實,從頭開始。現在我仔細觀察,我知道你要做什麼。我會試一試,讓你知道。 – jmease

+0

如果(file.StartsWith(@「\ f」)){file = @「\」+ file; }到Web方法的開始,但我得到相同的錯誤。 – jmease

相關問題