![](/img/trans.png)
[英]How do you detect if a file is being downloaded by a Browser or a Download Manager
[英]Why this action doesn't result in a file being downloaded? How to do that?
我正在用ASP.NET MVC3...
编写程序ASP.NET MVC3...
我如何导出动态生成的.xml
文件以供下载?
我通过视图中的按钮调用导出例程:
@using (Html.BeginForm(FormMethod.Post))
{
<div>
…
<input type="submit" value="Export to XML" class="btn btn-primary" style="background-color: green;" asp-action="Export" asp-controller="Manage" />
…
</div>
使用这个按钮,我想生成一个 XML 文件并打开一个下载另存为对话框将其下载到本地计算机......
然后我在 ManageController 中有以下导出操作:
public IActionResult Export(IFormCollection form)
{
… gathers form info and gets the table to be exported: oTable
// export to .xml here!
ExportXMLModel e = new ExportXMLModel();
return (e.DoExportXML(oTable)); // Doesnt export...
// sorry for the clumsy code…, but I'll write it better afterwards.
}
DoExportXML 在这里定义(这里我创建了一个 MemoryStream...):
public class ExportXMLModel
{
public ActionResult DoExportXML(List<itemType> ol)
{
XMLDocType XMLdoc = new XMLDocType();
… fills the XMLdoc object …
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));
TextWriter writer = new StreamWriter(memoryStream);
xml.Serialize(writer, XMLdoc);
FileResult file = new FileResult(memoryStream.ToArray(), "text/xml", "myXmlFile.xml");
writer.Close();
return file;
}
}
然后定义 FileResult 类:
public class FileResult : ActionResult
{
public String ContentType { get; set; }
public byte[] FileBytes { get; set; }
public String SourceFilename { get; set; }
public FileResult(byte[] sourceStream, String contentType, String sourceFilename)
{
FileBytes = sourceStream;
SourceFilename = sourceFilename;
ContentType = contentType;
}
}
这不会导致文件被下载......
我怎样才能产生这样的反应? 使用ASP.NET MVC
还是使用 jQuery?
非常感谢您的任何答复。
.NET Framework Controller.File和 .NET Core ControllerBase.File提供了几个FileResult
方法的抽象。 两者都可以使用字节数组或流返回,并允许您定义内容类型和文件名。
只需稍加修改即可使您的代码正常工作。 您不需要FileResult
类(MS 已经完成了繁重的工作)。 修改ExportXMLModel.DoExportXML
以返回一个字节数组(您将流转换为该数组,然后将其传递给您的自定义FileResult
)。
然后您的控制器操作如下所示:
public IActionResult Export(IFormCollection form)
{
… gathers form info and gets the table to be exported: oTable
// export to .xml here!
ExportXMLModel e = new ExportXMLModel();
return File(e.DoExportXML(oTable), "text/xml", "myXmlFile.xml");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.