我正在使用MVC 3我想动态创建一个CSV文件供下载,但我不确定正确的MVC导向方法。
在传统的ASP.net中,我会写一些类似的东西:
Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", attachment;filename='Test.csv'");
Response.Write("1,2,3");
Response.End();
我查看了ContentResult操作,但似乎我需要将结果创建为字符串,即
返回内容(myData,“text / csv”);
我想,我可以构建一个字符串,但由于这些文件可能长达几千行,这对我来说似乎效率低下。
有人能指出我正确的方向吗?感谢。
答案 0 :(得分:14)
我找到了一个解决这个问题的方法。您可以简单地定义action方法以返回EmptyResult()并直接写入响应流。例如:
public ActionResult RobotsText() {
Response.ContentType = "text/plain";
Response.Write("User-agent: *\r\nAllow: /");
return new EmptyResult();
}
这似乎没有任何问题。不确定'MVC'是怎么回事......
答案 1 :(得分:8)
我昨天在类似的问题上花了一些时间,这是如何正确地做到这一点:
@XmlSchema(
elementFormDefault=XmlNsForm.QUALIFIED,
namespace="http://www.example.com/FOO",
xmlns={@XmlNs(prefix="bar",
namespaceURI="http://www.example.com/BAR")}
)
package blog.prefix;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
答案 2 :(得分:3)
答案 3 :(得分:-2)
尝试这样的事情:
public ActionResult CreateReport(string report, string writer)
{
var stream = new MemoryStream();
var streamWriter = new StreamWriter(stream);
_generateReport.GenerateReport(report, writer);
streamWriter.Flush();
stream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(stream, writer.MimeType);
}