私の直感が確かな問題は、本当にばかげていることでしょう。しかし、私は2つの異なるページで次のようなグリッドビューを持っています。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>
他のページのものはどのように見えますか?
リンクが生成されないことを除いて、両方のグリッドビューは、リンクを作成するために使用されたIDを含むすべての関連情報を適切に作成します。だから、私は一番言っても大変です。誰かがこれを引き起こす原因を特定することはできますか?他の情報やコードが含まれているかどうかわからないので、他に何かを追加する必要がある場合はお知らせください。本当にありがとう。
EDIT:さておき、後者はリンクを生成していないという事実から、意図したとおり、彼らの両方が生成することを実証するために、参考のためにgridviewsの写真を追加。
編集:私は言ったテーブルを取り込むための私の2つのストアドプロシージャを追加することができます。最初のものは作業用のもの、もう1つはそうでないもの用のものです。
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
そして、それぞれのデータテーブルを移入するために、これらの2つのストアドプロシージャを呼び出す方法。
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;
}
FINAL EDIT - FIXED
やあみんな、私は、単純なHTMLリンクにそれを変更することで問題を解決してしまったので、起こっていくつかのASP shenanegansがありました。
<a href="<%# Eval("SerialNumber", "~/GetFile.aspx?ID={0}") %>">Download</a>
は、両方のファイルで同じこの部分です: "?〜/ GetFile.aspx ID = {0}" ' '<%#エバール( "のSerialNumber"、 )%> ''?そして、第2の形式でSerialNumberプロパティを持っていますか? – Vandita
あなたはので、多分あなたは、コードからグリッドビューにそれを渡している、データソースは、あなたのコード内で定義されていない –
のSerialNumberは、バインドされたデータソースに存在していることを確認する必要がありますか?はいの場合は、両方に必要なフィールドがあることを確認してください。データソースを投稿できますか? –