2017-05-08 78 views
0

我有一個問題,我的直覺是肯定會是一個非常愚蠢的細節錯過。但是我在兩個不同的頁面上有一個類似於下面的gridview。Gridview的asp:超鏈接不一致工作

<asp:GridView ID="gvFiles" Style="align-items: center; align-self: center" 
            AutoGenerateColumns="true" runat="server"> 
            <Columns> 
             <asp:TemplateField> 
              <ItemTemplate> 
               <asp:HyperLink runat="server" NavigateUrl='<%# Eval("SerialNumber", "~/GetFile.aspx?ID={0}") %>' Text="Download"></asp:HyperLink> 
              </ItemTemplate> 
             </asp:TemplateField> 
            </Columns> 
           </asp:GridView> 

這會產生一個鏈接,只需創建一個下載到我的數據庫文件中的ASP頁。它在一頁上奇妙地工作,而在另一頁上它不會正確地產生鏈接。

我將發佈下面的代碼檢查以進行比較。

<a href="GetFile.aspx?ID=40">Download</a> 

的是什麼工作的一個看上去像一個例子。

<a>Download</a> 

在另一頁上的內容是什麼樣的。

因此,除了沒有生成的鏈接之外,gridviews都可以正確創建所有相關信息,包括用於創建鏈接的id。所以我非常難以說至少。有人可以確定可能導致這種情況嗎?我不確定要包含哪些其他信息或代碼,請讓我知道是否需要添加其他內容。非常感謝。

編輯:添加Gridviews的圖片以供參考,以表明它們都按照預期生產,除了後者不產生鏈接的事實。

This one works

This one does not

編輯:我可以加我的兩個存儲過程用於填充說表。第一個是爲工作的人,第二個爲不是的。

CREATE PROCEDURE dbo.LoadFile 
@ChangeId INT 
AS 
BEGIN 
SELECT FileName + '.' + FileExtension AS 'File', FileType, ContentType, SerialNumber, Chart 
FROM dbo.ChangeFiles 
WHERE ChangeId = @ChangeId 
END 
GO 

CREATE PROCEDURE dbo.LoadPackageFile 
@PackageId INT 
AS 
BEGIN 
SELECT FileName + '.' + FileExtension AS 'File', FileType, ContentType, SerialNumber, Chart 
FROM dbo.ChangeFiles 
WHERE PackageId = @PackageId 
END 
GO 

,並要求這兩個存儲過程來填充其各自的數據表的方法。

public static DataTable GetFileList(int ChangeId) { 
    DataTable dt = new DataTable(); 
    string constr = ConfigurationManager.ConnectionStrings["ChangeDb"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) { 
     using (SqlCommand cmd = new SqlCommand("dbo.LoadFile", con)) { 
      try { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@ChangeId", ChangeId); 
       SqlDataAdapter sda = new SqlDataAdapter(cmd); 

       sda.Fill(dt); 
      } 
      catch (SqlException sqlex) { 
       throw new Exception("SQL Exception loading files from database. " + sqlex.Message); 
      } 

      catch (Exception ex) { 
       throw new Exception("Error loading results files from database. " + ex.Message); 
      } 
     } 
    } 
    return dt; 
} 

public static DataTable GetPackageFileList(int PackageId) { 
    DataTable dt = new DataTable(); 
    string constr = ConfigurationManager.ConnectionStrings["ChangeDb"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) { 
     using (SqlCommand cmd = new SqlCommand("dbo.LoadPackageFile", con)) { 
      try { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@PackageId", PackageId); 
       SqlDataAdapter sda = new SqlDataAdapter(cmd); 

       sda.Fill(dt); 
      } 
      catch (SqlException sqlex) { 
       throw new Exception("SQL Exception loading files from database. " + sqlex.Message); 
      } 

      catch (Exception ex) { 
       throw new Exception("Error loading results files from database. " + ex.Message); 
      } 
     } 
    } 
    return dt; 
} 

最後編輯 - 固定

嗨,我結束了,改成一個簡單的HTML鏈接解決了這個問題,所以有一些ASP shenanegans回事。

<a href="<%# Eval("SerialNumber", "~/GetFile.aspx?ID={0}") %>">Download</a> 
+0

這是部分在兩個文件中相同的:''<%#的eval( 「的SerialNumber」, 「〜/ GetFile.aspx ID = {0}?」 )%>''?你有第二種形式的SerialNumber屬性? – Vandita

+0

你必須確保SerialNumber存在於綁定的數據源 –

+0

數據源沒有在你的代碼中定義,所以也許你是從代碼傳遞給網格視圖?如果是的話,你確定他們都有必要的領域?你能發佈數據源嗎? –

回答

0

嘗試這樣的:

NavigateUrl='<%# "~/GetFile.aspx?ID=" + Eval("SerialNumber", "") %>' 
+0

我試過這個,不幸的是遇到了同樣的問題。它在已經工作的那個上工作,但不在那個沒有工作的那個上工作, – David