2012-06-14 180 views
0

想要在用戶單擊gridview列中顯示的超鏈接時打開pdf文件。文件的名稱取自存儲文件標題的gridview的第一列。從gridview中的超鏈接打開pdf

懸停在GridView的超鏈接顯示的文件鏈接,但點擊時它亙古不變的打開PDF文件,

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      HyperLink hlink = (HyperLink)e.Row.FindControl("HL"); 
      string url = "~/Docs/" + e.Row.Cells[1].Text +".pdf"; 
      hlink.NavigateUrl = url; 
      hlink.Text = "Read"; 
     } 
} 

當點擊超鏈接,因爲它是不能夠打開PDF以下錯誤出現文件。

無法找到該資源。 說明:HTTP 404。您正在尋找(或它的一個依賴)可能已被刪除的資源,有其名稱更改,或者暫時不可用

該事件被點擊在GridView超鏈接時被調用,也許在那裏打開pdf應用程序。請建議。非常感謝。

+3

您是否絕對肯定要鏈接的文件位於該位置?試着把'Server.MapPath(url);的調試輸出;'並確保物理文件位置匹配 – freefaller

+0

確定文件存在....我甚至把文件的完整路徑...仍然是相同的錯誤 – Sumit

回答

3

錯誤提示您的文件不存在。你應該做的是放棄你所做的連接,而是將整個文件名(包括擴展名)包含在你的數據源中並使用它(甚至整個路徑)。你想這樣做的原因是因爲你可能已經爲了審美目的而嚴格地修改/格式化/編碼單元格文本。你甚至可以添加一些嵌入式的HTML來設計它。

我會想象它會是這個樣子:

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
      DataRow row = ((System.Data.DataRowView)e.Row.DataItem).Row; 
      HyperLink hlink = e.Row.FindControl("HL") as HyperLink; 
      if (hlink!=null) 
      { 
       string url = string.Format("~/Docs/{0}",row["FileName"]); 
       hlink.NavigateUrl = url; 
       hlink.Text = "Read"; 
      } 
    } 
} 
+0

好的建議存儲整個文件名。 –

+0

工作你的建議,我工作在三個步驟,首先我實施,因爲它是你建議。第二,我在網址中加了「.pdf」。第三,我硬編碼整個文件路徑。同樣的錯誤,「資源無法找到」。我有文件在相同的位置。我覺得PDF應用程序必須被稱爲打開PDF文件,因爲它顯示「您正在尋找的資源(或其某個依賴項)可能已被刪除,更名或暫時不可用」..... 。depenedecies .... – Sumit

+1

有趣。在這種情況下,我會做什麼@Sumit是查看頁面的來源,然後觀察鏈接。在查看鏈接時,看看您是否注意到任何異常情況。您的路徑中存在問題,或者該文件在服務器上不存在。將路徑複製到剪貼板並粘貼到瀏覽器中,看看會發生什麼。它應該做同樣的事情,只有這樣做才能讓你看到以前沒有的東西。 – Jeremy

0

你試過選中「查看源文件」在瀏覽器這個網頁上檢查正在輸出鏈路的實際路徑和驗證它是正確的?
您是否已經通過調試程序確保FindControl("HL");實際上找到了您要查找的控件?由於控件位於GridView中,因此asp.net可能會修改其id。您可以嘗試使用越來越

HyperLink hlink = e.Row.Cells[HL_cell_index].Controls[HL_control_index] as HyperLink; 

如果遇到有問題的HL控制。這兩件事之一就是你的問題。

作爲一個建議,與@Jeremy一致,你還應該在你的數據源(無論是數據庫還是你正在使用的)中存儲文件的完整路徑來綁定到這個超鏈接列,不得不做這個額外的事件綁定,並遇到這樣的問題。