对c#和MVC来说还是个新手。我有一个MVC应用程序安装程序,其中的webapp运行在一个类似浏览器控制的chrome下。我有按钮里面的webapp (html),其中用户可以选择他想要的文件夹,然后我想要他们的实际路径。
为此,我向MVC控制器发出了一个ajax请求,它将打开folderBrowserDialog (System.Windows.Forms),然后返回path作为ajax响应。当我使用visual studio运行应用程序时,一切工作正常。但是,在将应用程序打包并安装可执行文件后,folderBrowserDialog根本不会出现。ajax响应中没有抛出错误,正确地使用空值
以下是代码(部分代码)
selectFolderGlobal是一个全局变量
public JObject OpenFolderExplorer()
{
try
{
Thread fb= new Thread(new ThreadStart(openFileBrowser), 1);
fb.SetApartmentState(ApartmentState.STA);
fb.Start();
fb.Join();
JObject selectedFolder = new JObject();
selectedFolder.Add("selectedFolder", selectedFolderGlobal);
return selectedFolder;
}
catch (Exception ex)
{
Logger.Log(" Exception: " + ex.Message);
JObject errorcode = JObject.Parse(mConstants.EXCEPTION);
return errorcode;
}
}
private void openFileBrowser()
{
try
{
var fbd= new FolderBrowserDialog();
fbd.ShowNewFolderButton = false;
DialogResult result = fbd.ShowDialog(new Form() { TopMost = true, WindowState = FormWindowState.Minimized });
if (result == DialogResult.OK)
{
selectedFolderGlobal= fbd.SelectedPath;
}
}
catch (Exception ex)
{
Logger.Entry(" Exception: " + ex.Message);
}
}
Ajax响应返回如下
{
"selectedFolder":null
}
有没有人知道为什么只有在包创建之后才会发生这种情况(在创建.exe之后)?System.Windows.Forms.dll被添加到依赖项中(如果没有,它应该抛出异常,否则甚至包构建都会失败)
发布于 2017-11-30 10:23:36
您正在尝试打开web服务器上的浏览文件夹对话框,用户浏览器正在其本地计算机上运行,即使此works用户无法看到您在服务器上启动的对话框,这些都是单独的计算机。并且web应用程序只在web应用程序根目录下拥有文件使用权限,您不能使用其他文件夹,实际上您并不需要它。
您必须了解web应用程序是如何工作的,所有c#代码都在服务器上执行,c#代码生成html、css、javascript和其他文件,然后浏览器下载这些内容并在本地机器上使用。浏览器呈现html,执行javascript...
当你在本地主机上调试时,你的计算机既是服务器又是客户端,这就是为什么在VS中工作,而你可能是在本地机器上以管理员身份运行它。
https://stackoverflow.com/questions/47544635
复制相似问题