2012-06-14 2 views
0

хотите открыть pdf-файл, когда пользователь нажимает на гиперссылку, показанную в столбце gridview. Имя файла берется из первого столбца 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 будет открыто там. Пожалуйста, предложите. Спасибо в adavance.

+3

Вы абсолютно уверены, что связанный с этим файл находится в этом месте? Попробуйте добавить отладочный вывод 'Server.MapPath (url);' и убедиться, что физическое расположение файла соответствует – freefaller

+0

. Iam наверняка есть файл .... я даже поместил полный путь к файлу ... все та же ошибка – Sumit

ответ

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"; 
      } 
    } 
} 
+0

Хорошее предложение по сохраняя полное имя файла. –

+0

, работая над вашими предложениями, я работал в три этапа, сначала я реализовал, как это вы предложили. во-вторых, я добавил «.pdf» к URL-адресу. в-третьих, я жестко закодировал весь путь к файлу. такая же ошибка, «ресурс не найден». У меня есть файл в том же месте. я чувствую, что приложение в формате pdf должно быть как-то вызвано для открытия pdf-файла, поскольку оно показывает, что «ресурс, который вы ищете (или его зависимые), мог быть удален, изменилось его имя или временно недоступно» ..... . depenecies .... – Sumit

+1

Интересно. Что бы я сделал в этом случае, @Sumit должен просмотреть исходный код страницы, а затем просмотреть ссылку. Посмотрите на ссылку, посмотрите, заметили ли вы какие-либо аномалии.Существует проблема где-то на вашем пути или файл не существует на сервере. Скопируйте путь в буфер обмена и вставьте его в браузер и посмотрите, что произойдет. Он должен делать то же самое, только делая это таким образом, чтобы вы могли видеть то, чего не делали раньше. – Jeremy

0

Вы пробовали проверки «View Source» в браузере на этой странице, чтобы проверить фактический путь ссылки, которые выводимый и проверить верно?
Вы прошли через отладчик, чтобы убедиться, что FindControl("HL"); на самом деле нахо дит элемент управления, который вы ищете? Поскольку элемент управления находится в GridView, asp.net мог бы изменить его id. Вы можете попытаться получить контроль HL использованием

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

, если у вас возникли проблемы есть. Ваша проблема должна быть одной из этих двух вещей.

В качестве предложения, по согласованию с @Jeremy, вы также должны сохранить полный путь к файлу в своем источнике данных (будь то база данных или что-то еще, что вы используете) для привязки к этому столбцу гиперссылки, t должен сделать это дополнительное связывание события и столкнуться с такими проблемами.

Смежные вопросы