我在这里要做的是允许我的用户在网络上的数据服务器中选择路径,以便生成配置文件。
我希望能够在我的asp.net页面上复制OpenFileDialog()的功能。但是这个函数在asp.net上不存在,我知道asp.net中有这个控件调用FileUpload。但我在这里需要的只是文件夹的路径/目录。我不需要上传文件。
怎么做?
答案 0 :(得分:1)
在Web应用程序中执行此操作非常棘手。您必须枚举要浏览的服务器上的文件夹(可能是与运行Web应用程序的服务器相同),然后将该层次结构呈现给用户以选择文件夹。如果它不是一个太大的层次结构,你可以直接枚举整个组,并将其显示在树中。如果它很重要,您可以使用Ajax方法:选择顶级文件夹,然后发送Ajax请求以获得下一级别,依此类推。
要枚举文件夹,您需要自己遍历文件系统。有一种方式,请参阅http://msdn.microsoft.com/en-us/library/dd997370(v=vs.100).aspx。
答案 1 :(得分:1)
不,没有内置控件。这不是正常的要求,因为大多数网站都不会让用户看到他们的文件结构。
构建执行此操作的用户控件虽然很简单。
我建议使用一个TreeView asp.net控件,该控件附加到您列出文件的数据源。
binding a treeview上的此示例应该可以帮助您入门。
您可以使用
填充数据var path = Server.MapPath("/");
var dirs = Directory.[EnumerateDirectories][2](path);
var files = Directory.[EnumerateFiles][3](path );
最后,为了使其看起来像一个对话框,您可以使用jQuery UI dialog组件。
答案 2 :(得分:0)
asp.net站点是一个与服务器完全断开连接的环境。正如其他人提到的,要复制OpenFileDialog(),您需要查看文件夹结构并将其呈现给Web /断开连接环境中的用户。在这种情况下,用户从实际文件系统中抽象出来......因为这种抽象已经发生,所以现在是考虑你正在采取的路线的好时机。可能值得考虑的是,不需要直接复制文件系统,您可以管理数据库中的“虚拟”文件夹结构,并在那里维护磁盘上文件的链接/路径吗?
答案 3 :(得分:0)
我找到的解决方案是,这适用于寻找答案的任何人: -
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");
}