gur*_*gui 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());
}
Run Code Online (Sandbox Code Playgroud)
这应该生成一个用户可以下载的csv文件.
我在视图中通过jQuery请求调用此方法:
$.getJSON('../Controller2/ExportList', function (data) {
//...
});
Run Code Online (Sandbox Code Playgroud)
问题是,我没有得到任何下载,我不知道为什么.调用该方法但没有下载.
这有什么不对?
您的控制器方法需要始终返回ActionResult.所以这个方法应该更像
public ActionResult ExportList()
{
var export = GenExport();
CsvExport<LiveViewListe> csv = new CsvExport<LiveViewListe>(export);
return new CsvResult(csv);
}
Run Code Online (Sandbox Code Playgroud)
哪个CsvResult类继承ActionResult并执行必要的操作以提示用户下载Csv结果.
例如,如果你真的需要Response.Write这可能是:
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的CsvExport类具有以下Export方法,您还可以考虑使其更通用:
public class CsvResult<T> : ActionResult
{
private CsvExport<T> data;
public CsvResult (CsvExport<T> data)
{
this.data = data;
}
.... same ExecuteResult code
}
Run Code Online (Sandbox Code Playgroud)
现在它支持你的任何csv下载,而不仅仅是LiveViewListe.
| 归档时间: |
|
| 查看次数: |
6005 次 |
| 最近记录: |