0

我正在使用带有 mvc3 的 Web 应用程序 asp.net。我是 mvc3 的新手。我的网页上有一个下载按钮。当我要单击下载按钮时,我希望能够打开那个 XML 文件

我已经尝试在ActionResult中进行一些代码更改,但我没有打开文件。通过使用下面提到的代码,我得到了一个下载弹出窗口。每当我要打开文件时,我都会遇到一些异常,如下所示。谁能帮我做这件事?帮我解决这个问题。:-)

提前致谢。

我在控制器中的代码是:

public FileResult Download(string id)
{
    string fid = Convert.ToString(id);

    var model = service.GetAllDefinitions().First(x => x.ID == id);
    var definitionDetails = new StatisticDefinitionModel(model);
    var definition = definitionDetails.ToXml;

    string fileName = definitionDetails.Name + ".xml";
    string contentType = "text/xml";

    return File(Encoding.Unicode.GetBytes(definition), contentType, fileName);
   }

例外是:

The XML page cannot be displayed 
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. 


--------------------------------------------------------------------------------

A name was started with an invalid character. Error processing   resource 'file:///C:/Users/asub/Downloads/fileNamegd...

<
4

2 回答 2

0

你不能传递一个字节数组,你需要一个流。只需从您的定义中传递一个流:

    public FileResult Download(string id) {
        string fid = Convert.ToString(id);

        var model = service.GetAllDefinitions().First(x => x.ID == id);
        var definitionDetails = new StatisticDefinitionModel(model);
        var definition = definitionDetails.ToXml;

        string fileName = definitionDetails.Name + ".xml";
        string contentType = "text/xml";

        return File(new MemoryStream(Encoding.Unicode.GetBytes(definition)), contentType, fileName);
    }
于 2012-08-08T11:47:51.497 回答
0

如果您返回 FileResult,它将是文件,如果您返回字符串,它将在浏览器中打开。

更新:此代码将返回文件以供下载

public FileResult GetXmlFile()
{
    string xml=""; //string presented xml
    var stream = new MemoryStream();
    var writer = XmlWriter.Create(stream);
    writer.WriteRaw(xml);
    stream.Position = 0;
    var fileStreamResult = File(stream, "application/octet-stream", "xml.xml");
    return fileStreamResult;        
}
于 2012-08-08T09:01:26.947 回答