2017-05-08 16 views
0

私の直感が確かな問題は、本当にばかげていることでしょう。しかし、私は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の写真を追加。

This one works

This one does not

編集:私は言ったテーブルを取り込むための私の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> 
+0

は、両方のファイルで同じこの部分です: "?〜/ GetFile.aspx ID = {0}" ' '<%#エバール( "のSerialNumber"、 )%> ''?そして、第2の形式でSerialNumberプロパティを持っていますか? – Vandita

+0

あなたはので、多分あなたは、コードからグリッドビューにそれを渡している、データソースは、あなたのコード内で定義されていない –

+0

のSerialNumberは、バインドされたデータソースに存在していることを確認する必要がありますか?はいの場合は、両方に必要なフィールドがあることを確認してください。データソースを投稿できますか? –

答えて

0

このようにそれを試してみてください。

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

私はこれを試して、残念なことに同じ問題に遭遇しました。それは既に働いていたもので働いていましたが、 – David

関連する問題