我有一個問題,我的直覺是肯定會是一個非常愚蠢的細節錯過。但是我在兩個不同的頁面上有一個類似於下面的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的圖片以供參考,以表明它們都按照預期生產,除了後者不產生鏈接的事實。
編輯:我可以加我的兩個存儲過程用於填充說表。第一個是爲工作的人,第二個爲不是的。
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>
這是部分在兩個文件中相同的:''<%#的eval( 「的SerialNumber」, 「〜/ GetFile.aspx ID = {0}?」 )%>''?你有第二種形式的SerialNumber屬性? – Vandita
你必須確保SerialNumber存在於綁定的數據源 –
數據源沒有在你的代碼中定義,所以也許你是從代碼傳遞給網格視圖?如果是的話,你確定他們都有必要的領域?你能發佈數據源嗎? –