从gridview中的超链接打开pdf

时间:2012-06-14 16:25:40

标签: c# asp.net

当用户点击gridview列中显示的超链接时,想要打开pdf文件。文件的名称取自gridview的第一列,其中存储了文件标题。

将鼠标悬停在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应用程序。请建议。谢谢你。

2 个答案:

答案 0 :(得分: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";
            }
     } 
}

答案 1 :(得分:0)

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

获取HL控件
HyperLink hlink = e.Row.Cells[HL_cell_index].Controls[HL_control_index] as HyperLink;

如果你遇到问题。这两件事中的一件必须是你的问题。

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