0

当用户单击显示在 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应用程序。请建议。提前致谢。

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;

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

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

于 2012-06-14T16:43:21.673 回答