繁体   English   中英

为什么此操作不会导致下载文件? 怎么做?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM