Столбцы гиперссылки в gridview - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть папка, в которой находятся файлы разных типов, такие как doc, xls, ppt и т. Д. Отображается мой gridview, ID, имя файла и тип.Я хочу сделать столбец с именем файла в виде гиперссылки.Возможно ли, что столбец гиперссылки действует как гиперссылка + выбранный индекс?Что я хочу сказать, так это то, что когда я нажимаю на имя файла, это не должно перенести меня на другую страницу, но открывает файл, на который я нажимаю?Я использовал командное поле в gridview с текстом как представление, которое отображает все индексы этого столбца как представление.Но сейчас я не хочу так.Вместо этого я хочу, чтобы поле гиперссылки действовало как это поле команды.Возможно ли это?

Что именно я хочу, если вид сетки выглядит следующим образом, если вид сетки отображается как

Id Тип имени файла


1 ячейка документа

2 wood xls

3 tiger ppt

Я хочу отобразить ячейку, дерево и тигра в виде гиперссылок, и они не должны переносить меня на другую страницу, вместо этого они должны открывать файлыиз папки

1 Ответ

1 голос
/ 16 ноября 2011

Вы можете создать файл пользовательского обработчика (.ashx) и соответственно установить информацию заголовка ответа.Это должно обеспечить перенаправление на другую страницу.

1) Зарегистрировать универсальный HttpHandler для обработки загрузок (Добавить> Новый элемент> Универсальный обработчик):

Downloads.ashx.cs:

using System;
using System.Web;

namespace FileDownloads
{
    public class Downloads : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            var file = context.Request.QueryString["f"];

            // Assuming all downloadable files are in a folder called "downloads"
            // located at the root of your website/application...
            var path = context.Server.MapPath(
                string.Format("~/downloads/{0}", file)
            );

            var response = context.Response;
            response.ClearContent();
            response.Clear();
            response.AddHeader("Content-Disposition",
                string.Format("attachment; filename={0};", file)
            );
            response.WriteFile(path);
            response.Flush();
            response.End();
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }
}

2) Подключите ваш GridView так:

defalut.aspx:

<asp:gridview id="downloadsGridView" runat="server" autogeneratecolumns="false">
    <columns>
        <asp:hyperlinkfield headertext="File Name"
          datatextfield="Name"
          datanavigateurlfields="Name"
          datanavigateurlformatstring="~/Downloads.ashx?f={0}" />
    </columns>
</asp:gridview>

default.aspx.cs:

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

namespace FileDownloads
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            var directory = Server.MapPath("~/downloads/");
            var filePaths = Directory.GetFiles(directory);

            downloadsGridView.DataSource = filePaths.Select(x => new DLFile
            {
                Name = x.Split('\\').Last()
            });
            downloadsGridView.DataBind();
        }

        public class DLFile
        {
            public string Name { get; set; }
        }
    }
}

Очевидно, вам нужно настроить приведенный выше пример в соответствии с вашими конкретными требованиями.Загрузка файлов с помощью вышеуказанного метода является прекрасным примером того, когда вам следует использовать общий HttpHandler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...