Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SaveFileDialog不支持';行不通_C#_.net - Fatal编程技术网

C# SaveFileDialog不支持';行不通

C# SaveFileDialog不支持';行不通,c#,.net,C#,.net,我正在开发一个操作,创建一个excel文件,然后打开一个SaveFileDialog,允许客户端将其保存到计算机中 问题是,在本地,SaveFileDialog可以工作,但出现在我的浏览器窗口后面,这是一个问题 然后,当我在服务器上发布它时,SaveFileDialog完全不起作用。 我在Stackoverflow上读了一些关于这个的其他话题,但是我仍然没有找到正确的答案 (很抱歉我的英语错误,我是法国人)。 这是我的密码: String path = string.Empty; object

我正在开发一个操作,创建一个excel文件,然后打开一个SaveFileDialog,允许客户端将其保存到计算机中

问题是,在本地,SaveFileDialog可以工作,但出现在我的浏览器窗口后面,这是一个问题

然后,当我在服务器上发布它时,SaveFileDialog完全不起作用。 我在Stackoverflow上读了一些关于这个的其他话题,但是我仍然没有找到正确的答案

(很抱歉我的英语错误,我是法国人)。 这是我的密码:

String path = string.Empty;
object misValue = System.Reflection.Missing.Value;
bool canExport = false;

Excel.Application app = new Excel.Application();
Excel.Workbook wb = app.Workbooks.Add(1);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);
Excel.Range rng = (Excel.Range)ws.get_Range("A1", "K1");
/** Excel File completion **/
/** ... **/
/** ... **/
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.InitialDirectory = Environment.SpecialFolder.Personal.ToString();
    sfd.Filter = "Classeur Excel 2010 (*.xls)|*.xls";

    if (STAShowDialog(sfd) == DialogResult.OK)
    {
        path = sfd.FileName;
        if (System.IO.File.Exists(path))
        {
            try
            {
                System.IO.File.Delete(path);
                canExport = true;
            }
            catch
            {
                MessageBox.Show("Impossible d'écrire par-dessus ce fichier.");
                canExport = false;
            }
        }
        else
        {
            canExport = true;
        }
    }

    SaveExcelFile(canExport, wb, path, app, ws, misValue);
    return View();
现在我的功能是:

public void SaveExcelFile(bool canExport, Excel.Workbook wb, String path, Excel.Application app, Excel.Worksheet ws, object misValue)
{
    if (canExport)
    {
        try
        {
            wb.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,
                          Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive,
                          XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);


            wb.Close(true, misValue, misValue);
            app.Quit();
        }
        catch
        {
            MessageBox.Show("Problème durant l'exportation\r\n Code erreur #EX01");
        }
    }

    releaseObject(ws);
    releaseObject(wb);
    releaseObject(app);
}

private DialogResult STAShowDialog(FileDialog dialog)
{
    DialogState state = new DialogState();
    state.dialog = dialog;
    System.Threading.Thread t = new System.Threading.Thread(state.ThreadProcShowDialog) { IsBackground = true, Name = "threadExport", Priority = System.Threading.ThreadPriority.AboveNormal };
    t.SetApartmentState(System.Threading.ApartmentState.STA);
    t.Start();
    t.Join();
    return state.result;
}

您将无法使用
SaveFileDialog
从web服务器向本地计算机显示保存文件对话框。通过浏览器触发“保存文件”对话框的唯一方法是将用户链接到Web服务器上的文件,或提供具有正确MIME类型的页面。这通常是通过使用

正在服务器上打开“保存文件”对话框

例如:

<%@ WebHandler Language="C#" Class="Handler" %> 

using System; 
using System.Web; 

public class Handler : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 

        HttpResponse r = context.Response; 
        r.ContentType = "image/png"; 
        // 
        // Write the requested image 
        // 
        string file = context.Request.QueryString["file"]; 

// Get Data From Database. And write file. 
        if (file == "logo") 
        { 
            r.WriteFile("Logo1.png"); 
        } 
        else 
        { 
            r.WriteFile("Flower1.png"); 
        } 
    } 

    public bool IsReusable { 
        get { 
            return false; 
        } 
    } 
}

使用制度;
使用System.Web;
公共类处理程序:IHttpHandler{
public void ProcessRequest(HttpContext上下文){
HttpResponse r=context.Response;
r、 ContentType=“image/png”;
// 
//写入请求的映像
// 
字符串文件=context.Request.QueryString[“文件”];
//从数据库中获取数据。并写入文件。
如果(文件==“徽标”)
{ 
r、 WriteFile(“Logo1.png”);
} 
其他的
{ 
r、 WriteFile(“Flower1.png”);
} 
} 
公共布尔可编辑{
获取{
返回false;
} 
} 
}

来源:

您将无法使用
SaveFileDialog
从web服务器向本地计算机显示保存文件对话框。通过浏览器触发“保存文件”对话框的唯一方法是将用户链接到Web服务器上的文件,或提供具有正确MIME类型的页面。这通常是通过使用

正在服务器上打开“保存文件”对话框

例如:

<%@ WebHandler Language="C#" Class="Handler" %> 

using System; 
using System.Web; 

public class Handler : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 

        HttpResponse r = context.Response; 
        r.ContentType = "image/png"; 
        // 
        // Write the requested image 
        // 
        string file = context.Request.QueryString["file"]; 

// Get Data From Database. And write file. 
        if (file == "logo") 
        { 
            r.WriteFile("Logo1.png"); 
        } 
        else 
        { 
            r.WriteFile("Flower1.png"); 
        } 
    } 

    public bool IsReusable { 
        get { 
            return false; 
        } 
    } 
}

使用制度;
使用System.Web;
公共类处理程序:IHttpHandler{
public void ProcessRequest(HttpContext上下文){
HttpResponse r=context.Response;
r、 ContentType=“image/png”;
// 
//写入请求的映像
// 
字符串文件=context.Request.QueryString[“文件”];
//从数据库中获取数据。并写入文件。
如果(文件==“徽标”)
{ 
r、 WriteFile(“Logo1.png”);
} 
其他的
{ 
r、 WriteFile(“Flower1.png”);
} 
} 
公共布尔可编辑{
获取{
返回false;
} 
} 
}


来源:

这是一个web应用程序,是吗?你不是以web开发人员的身份思考的。不要在web应用程序中使用对话框,这是个坏主意。看看这里,
ThreadProcShowDialog
在哪里?你的线程看起来很奇怪。通常你只是在主线程上显示这样的对话框。问题是我的文件没有保存在服务器上,因为它没有安装Excel。所以我需要一种方法,允许下载,而不给一个网址。。。就用Woorkbook对象。这是一个web应用程序。是吗?你不是作为一个web开发人员思考的。不要在web应用程序中使用对话框,这是个坏主意。看看这里,
ThreadProcShowDialog
在哪里?你的线程看起来很奇怪。通常你只是在主线程上显示这样的对话框。问题是我的文件没有保存在服务器上,因为它没有安装Excel。所以我需要一种方法,允许下载,而不给一个网址。。。只是Woorkbook对象。问题是我的文件没有保存在服务器上,因为它没有安装Excel。所以我需要一种方法,允许下载,而不给一个网址。。。就拿着这本书object@fitz_lucassen我不明白你的意思。代码在哪里执行,预期结果是什么?拓扑结构也是什么(Web服务器、文件服务器等)?在问题中添加尽可能多的细节,我将尝试澄清我的答案。好的,我将尝试澄清。我在.NETMVC3中,它是一个web服务器(IIS)。我的网站上有一个链接。例如,当客户单击它时,他会被重定向到一个名为“ExcelList”的操作。这个动作的代码在我上面的第一条消息中。我创建了一个Excel文件(感谢interop框架),然后我只想(不将其保存在服务器上)下载刚刚创建的文件。您还需要其他信息吗?@fitz_lucassen在这种情况下,您需要使用类似于我的答案的代码来创建一个为该文件提供服务的HttpHandler。您不需要先保存文件,您可以将excel文件输出到MemoryStream,然后使用HttpHandler为该MemorySteam提供服务。是的,我看到了,但不幸的是,我似乎没有“SaveToStream”功能。。。您知道如何将工作簿对象保存为流或字节吗?问题是我的文件没有保存在服务器上,因为它没有安装Excel。所以我需要一种方法,允许下载,而不给一个网址。。。就拿着这本书object@fitz_lucassen我不明白你的意思。代码在哪里执行,预期结果是什么?拓扑结构也是什么(Web服务器、文件服务器等)?在问题中添加尽可能多的细节,我将尝试澄清我的答案。好的,我将尝试澄清。我在.NETMVC3中,它是一个web服务器(IIS)。我的网站上有一个链接。例如,当客户单击它时,他会被重定向到一个名为“ExcelList”的操作。这个动作的代码在我上面的第一条消息中。我创建了一个Excel文件(感谢interop框架),然后我只想(不将其保存在服务器上)下载刚刚创建的文件。您还需要其他信息吗?@fitz_lucassen在这种情况下,您需要使用类似于我的答案的代码来创建一个为该文件提供服务的HttpHandler。是吗