Ok, when you say browse to some folder? I would have to "guess" that you mean say a particular folder and location. I kind of doubt that you would want (or let) anyone on the web site to go browsing around on that web server and the network it is attached to? Seems a little too high risk, right?
In fact, probably better is to say pull the list of files from that folder - maybe my up-loads folder or whatever.
You can then display/present a list of files to the user - in a grid view for eaxample. And thus for each row, say a download button.
Now, if for some reason that folder had many sub folders? then present the user with maybe a tree view control. but, the concept of have a web server, and the users browser (sitting on each users desktop) to browse and rummage around on the files on the server? Sounds WAY WAY too high risk, and far too dangerous from a security point of view.
However, as noted, you can certainly pull/build/create a "list" of files that exist in a folder on the server, present that list of files, and let the user then download such files.
so, say in our web site, we have a folder ~/Content/Animals/
So, drop in a grid view to the page like this:
<div style="width:40%;padding:35px">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="table">
<Columns>
<asp:BoundField DataField="File Name" HeaderText="File" />
<asp:BoundField DataField="Date" HeaderText="Date" />
<asp:BoundField DataField="File Size" HeaderText="Size" />
<asp:TemplateField HeaderText="Select" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="cmdDownLoad" runat="server" Text="Download" cssclass="btn"
OnClick="cmdDownLoad_Click" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
And code behind to load is thus this:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadGrid();
}
void LoadGrid()
{
// create a table for the files
DataTable MyTable = new DataTable();
MyTable.Columns.Add("Date", typeof(string));
MyTable.Columns.Add("File Size", typeof(string));
MyTable.Columns.Add("File Name", typeof(string));
MyTable.Columns.Add("Path", typeof(string));
string strURLFolder = "~/Content/Animals/";
string strFolder = Server.MapPath(strURLFolder);
DirectoryInfo MyDir = new DirectoryInfo(strFolder);
FileInfo[] MyFiles = MyDir.GetFiles("*.*");
foreach (FileInfo MyFile in MyDir.GetFiles("*.*"))
{
DataRow OneRow = MyTable.NewRow();
OneRow["Date"] = MyFile.LastAccessTime;
OneRow["File Size"] = (MyFile.Length / 1024).ToString() + " KB";
OneRow["File Name"] = MyFile.Name;
OneRow["Path"] = strURLFolder + MyFile.Name;
MyTable.Rows.Add(OneRow);
}
MyTable.DefaultView.Sort = "Date";
GridView1.DataSource = MyTable;
GridView1.DataBind();
}
And when we run, we now get/have this:

And the code behind the down load button, is this:
protected void cmdDownLoad_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
GridViewRow gRow = btn.NamingContainer as GridViewRow;
string sFileOnly = gRow.Cells[0].Text;
string sFile = Server.MapPath("~/Content/Animals/" + sFileOnly);
string sMineType = MimeMapping.GetMimeMapping(sFile);
Response.ContentType = sMineType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + sFileOnly);
Response.TransmitFile(sFile);
Response.End();
}
So, you are free to load up a grid. And as noted, if you needed to allow user to select/show/have say sub folders. Then in place of the gridView, use a tree view.
So, it kind of depends on what kind of list of files you wish to present to the user.