あなたの質問は少し漠然としていますが、私はあなたが探しているものを手に入れたと思います. とにかく、ASP.NET を使用していると仮定します。最初のステップは、ファイルを表示するためのものを作成することです。次のように、ハイパーリンクのみを含むリピーターを使用しました。
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<ItemTemplate>
<asp:HyperLink ID="hyp" runat="server" />
</ItemTemplate>
</asp:Repeater>
この後、リピーターを埋める必要があります。次のようにページロードでそれを行うことができます:
if (!Page.IsPostBack)
{
string[] files = Directory.GetFiles(@"C:\testfolder");
rpt.DataSource = files;
rpt.DataBind();
}
次のステップは、次のように ItemDataBound メソッドを完成させることです。
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
string file = e.Item.DataItem as string;
HyperLink hyp = e.Item.FindControl("hyp") as HyperLink;
hyp.Text = file;
hyp.NavigateUrl = string.Format("~/Handlers/FileHandler.ashx?file={0}", file);
}
}
ナビゲート URL でわかるように、HttpHandler を使用します。新しいハンドラー ファイル (.ashx) を作成するとき。その ProcessRequest メソッドでは、次のようなものが必要になるため、ファイルをダウンロードできます。
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Request.QueryString["file"]);
context.Response.WriteFile(context.Request.QueryString["file"]);
context.Response.End();
}
次のように、system.web ノードの web.config にハンドラーを登録することを忘れないでください。
<httpHandlers>
<add verb="*" path="~/Handlers/FileHandler.ashx?file={0}" type="StackOverflow.Questions.Handlers.FileHandler, StackOverflow.Questions"/>
</httpHandlers>
私が行ったようにクエリ文字列を介してパスを渡すことはすべきではないことに注意してください。ただし、アプリケーションがどのように機能しているかはわかりませんので、自分に合ったものを見つけてください。
幸運を!