我在这里要做的是允许我的用户在网络上的数据服务器中选择一个路径,以便我可以生成一个配置文件。
我希望能够在我的 asp.net 页面上复制 OpenFileDialog() 的功能。然而这个函数在 asp.net 上不存在,而且我知道在 asp.net 调用 FileUpload 中有这个控件。但我在这里需要的只是文件夹的路径/目录。我不需要上传我的文件。
怎么做到呢?
我在这里要做的是允许我的用户在网络上的数据服务器中选择一个路径,以便我可以生成一个配置文件。
我希望能够在我的 asp.net 页面上复制 OpenFileDialog() 的功能。然而这个函数在 asp.net 上不存在,而且我知道在 asp.net 调用 FileUpload 中有这个控件。但我在这里需要的只是文件夹的路径/目录。我不需要上传我的文件。
怎么做到呢?
不,对此没有内置控件。这不是一个正常的要求,因为大多数网站不让他们的用户看到他们的文件结构。
构建一个执行此操作的用户控件将很简单。
我建议使用 TreeView asp.net 控件,附加到您列出文件的数据源。
这个关于绑定树视图的示例应该可以帮助您入门。
您可以使用填充数据
var path = Server.MapPath("/");
var dirs = Directory.[EnumerateDirectories][2](path);
var files = Directory.[EnumerateFiles][3](path );
最后,为了让它看起来像一个对话框,您可以使用jQuery UI 对话框组件。
在 Web 应用程序中执行此操作很棘手。您必须枚举服务器上要浏览的文件夹(大概这是运行 Web 应用程序的同一台服务器),然后将该层次结构呈现给用户以选择文件夹。如果层次结构不是太大,您可以在前面枚举整个一堆,并将其显示在树中。如果它很大,您可以使用 Ajax 方法:选择顶级文件夹,然后发送 Ajax 请求以获取下一个级别,依此类推。
要枚举文件夹,您需要自己遍历文件系统。一种方法见http://msdn.microsoft.com/en-us/library/dd997370(v=vs.100).aspx。
我找到的解决方案是,这仅适用于寻找答案的任何人:-
protected void browse_Click(object sender, EventArgs e) {
Thread thdSyncRead = new Thread(new ThreadStart(openfolder));
thdSyncRead.SetApartmentState(ApartmentState.STA);
thdSyncRead.Start();
}
public void openfolder()
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
DialogResult result = fbd.ShowDialog();
string selectedfolder = fbd.SelectedPath;
string[] files = Directory.GetFiles(fbd.SelectedPath);
System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
}
asp.net 站点是与您的服务器完全断开连接的环境。正如其他人所提到的,要复制 OpenFileDialog() 您将需要查看文件夹结构并将其呈现给 web/断开连接环境中的用户。在这种情况下,用户是从实际的文件系统中抽象出来的……因为这种抽象已经发生,现在是考虑您所采用的路线的好时机。可能值得考虑的是不需要文件系统的直接复制,您可以管理数据库中的“虚拟”文件夹结构,并在那里维护磁盘上文件的链接/路径?