Файл не загружается из GridView по событию клика
У меня есть GridView
с именем gvEmplAttachments, который имеет 3 столбца:
- Я бы
- Имя файла
- Путь файла
Каждый ряд имеет LinkButton
это позволит пользователю загрузить файл, эта кнопка закодирована так:
<asp:LinkButton id="lbViewFile" runat="server" CommandName="ViewFile" CommandArgument='<%# Container.DataItemIndex %>' >View</asp:LinkButton>
GridView установлен со следующим:
OnRowCommand ="gvEmplAttachments_OpenAttachment_RowCommand"
Так что он будет выполнять функцию в CodeBehind
В моем CodeBehind у меня есть эта функция:
protected void gvEmplAttachments_OpenAttachment_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ViewFile")
{
//Get rowindex
int rowindex = Convert.ToInt32(e.CommandArgument);
//Get the Row
GridViewRow gvr = gvUaSettings.Rows[rowindex];
//Get the Needed Values
Label lblPath = gvr.FindControl("lblFilePath") as Label;
Label lblName = gvr.FindControl("lblFileName") as Label;
//String The values
string fileName = lblName.Text;
string filePath = Server.MapPath(lblPath.Text);
//Should Download the file
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/x-unknown";
response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
response.TransmitFile(filePath);
response.Flush();
response.End();
}
}
Но проблема в том, что когда я нажимаю кнопку, я получаю эту ошибку:
В экземпляре объекта не задана ссылка на объект
У меня вопрос, что я пропускаю, что приведет к нулевому значению. Потому что Grid отображает правильные FileName и FilePath.
1 ответ
Как вы упомянули, ваш идентификатор Gridview - это gvEmplAttachments, но код, который вы написали для захвата строки Gridview, запускающей событие OnCommand, имеет другой идентификатор Gridview. GridViewRow gvr = gvUaSettings.Rows[rowindex];
,
Вы можете попробовать следующий код для получения события команды запуска строки:
GridViewRow gvr = gvEmplAttachments.Rows[rowindex];