从网格视图中的超链接打开 pdf

本文关键字:pdf 超链接 网格 视图 | 更新日期: 2023-09-27 18:37:07

当用户单击 GridView 列中显示的超链接时,想要打开 PDF 文件。文件的名称取自存储文件标题的网格视图的第一列。

将鼠标悬停在 GridView 中的超链接上会显示文件链接,但单击时它不会打开 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。要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用

在 GridView 中单击超链接时调用哪个事件,也许要在那里打开 PDF 应用程序。请指教。谢谢。

从网格视图中的超链接打开 pdf

该错误表明您的文件不存在。 您应该做的是放弃您所做的串联,而是在数据源中包含文件的整个名称(包括扩展名)并使用它(甚至整个路径)。 您想要这样做的原因是,您可能严格出于美学目的修改/格式化/编码了单元格文本。 您甚至可以添加一些嵌入式 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";
            }
     } 
}
您是否

尝试过检查此页面上浏览器中的"查看源代码"以检查正在输出的链接的实际路径并验证其是否正确?
是否已逐步执行调试器以确保FindControl("HL");确实找到了要查找的控件?由于控件位于 GridView 中,因此 asp.net 可能已修改其id。您可以尝试HL使用

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

如果你在那里有问题。这两件事之一一定是你的问题。

作为建议,与@Jeremy一致,您还应该将文件的完整路径存储在数据源(无论是数据库还是您正在使用的任何内容)中以绑定到此超链接列,这样您就不必执行此额外的事件绑定并遇到此类问题。