Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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# 如何做出回应。写(…);在我的控制器中_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 如何做出回应。写(…);在我的控制器中

C# 如何做出回应。写(…);在我的控制器中,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我有一个控制器,采用以下方法: public void ExportList() { var out = GenExport(); CsvExport<LiveViewListe> csv = new CsvExport<LiveViewListe>(out); Response.Write(csv.Export()); } 问题是,我没有得到任何下载,我也不知道为什么。调用了该方法,但没有下载 这里出了什么问题?您的控制器方法需要始终返回一个

我有一个控制器,采用以下方法:

public void ExportList()
{
    var out = GenExport();

    CsvExport<LiveViewListe> csv = new CsvExport<LiveViewListe>(out);
    Response.Write(csv.Export());
}
问题是,我没有得到任何下载,我也不知道为什么。调用了该方法,但没有下载


这里出了什么问题?

您的控制器方法需要始终返回一个
ActionResult
。因此,该方法应该更像

public ActionResult ExportList()
{
    var export = GenExport();

    CsvExport<LiveViewListe> csv = new CsvExport<LiveViewListe>(export);
    return new CsvResult(csv);
}
如果您的
CsvExport
类具有
Export
方法,您还可以考虑将其变得更通用:

public class CsvResult<T> : ActionResult
{

    private CsvExport<T> data;
    public CsvResult (CsvExport<T> data)
    {
        this.data = data;
    }

    .... same ExecuteResult code
}
public类CsvResult:ActionResult
{
私有CSVEExport数据;
公共CsvResult(CsvExport数据)
{
这个数据=数据;
}
..相同的执行器结果代码
}

现在,它支持任何csv下载,而不仅仅是
LiveViewListe

FileResult
必须提供写入响应流的位置或文件内容。OP似乎有自己的机制(
.Export()
)以Csv格式获取数据。这段代码只做了将数据放入响应流所需的简单工作——它还演示了一些可以定制的Mvc内部结构。我的错误是,.@ta.speot.is——这只是
FileContentResult
的包装方法,与上面描述的问题相同——需要一个
byte[]
作为数据传递,我不确定用户是否有。如果OP的
CsvExport.Export
方法返回
byte[]
,那么快乐日-使用
FileContentResult
,因为它与我上面的代码的作用非常相似。对返回非JSON的内容调用
$.getJSON
的结果是什么?我将JSON请求更改为指向新控制器方法的正常链接,现在它开始工作了!
public class CsvResult : ActionResult
{
    private CsvExport<LiveViewListe> data;
    public CsvResult (CsvExport<LiveViewListe> data)
    {
        this.data = data;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        HttpResponseBase response = context.HttpContext.Response;

        response.ContentType = "text/csv";
        response.AddHeader("Content-Disposition", "attachment; filename=file.csv"));

        if (data!= null)
        {
            response.Write(data.Export());
        }
    }
}
public class CsvResult<T> : ActionResult
{

    private CsvExport<T> data;
    public CsvResult (CsvExport<T> data)
    {
        this.data = data;
    }

    .... same ExecuteResult code
}