0

ユーザーがグリッドビュー列に表示されているハイパーリンクをクリックしたときに pdf ファイルを開きたい.ファイルの名前は、ファイルのタイトルが保存されているグリッドビューの最初の列から取得されます。

グリッドビューのハイパーリンクにカーソルを合わせるとファイル リンクが表示されますが、クリックしても 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。探しているリソース (またはその依存関係の 1 つ) が削除されたか、名前が変更されたか、一時的に利用できない可能性があります

グリッドビューでハイパーリンクがクリックされたときに呼び出されるイベントで、pdf アプリケーションがそこで開かれる可能性があります。提案してください。事前に感謝します。

4

2 に答える 2

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";
            }
     } 
}
于 2012-06-14T16:41:49.143 に答える
0

このページのブラウザの「ソースを表示」で実際に出力されているリンクのパスを確認し、正しいことを確認してみましたか? 探しているコントロールが実際に見つかって
いることを確認するために、デバッガーをステップ実行しましたか? FindControl("HL");コントロールは GridView にあるため、asp.net によってそのid. HLを使用してコントロールを取得してみることができます

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

そこに問題がある場合。これら2つのことの1つがあなたの問題に違いありません。

提案として、@ Jeremyに同意して、このハイパーリンク列にバインドするために、データソース(データベースまたは使用しているもの)にファイルのフルパスも保存する必要があります。この余分なイベント バインディングと、このような問題が発生します。

于 2012-06-14T16:43:21.673 に答える