IE在页面Load - MVC上显示“另存为”对话框

时间:2011-06-23 09:22:13

标签: asp.net-mvc-3

我正在使用MVC 3 Razor,我正在使用“未知文件类型”获取“另存为”对话框,内容是网站上多个页面上的Html页面,此对话框显示在IE上,在Firefox上,它显示一个错误页面,上面写着“XML解析错误”。

有时当“另存为”出现时,我检查了响应标题,它显示html页面的“Content-type”是“application / xhtml + xml; charset = utf-8”,我没有设置这些标题在服务器端。

问题是,这种情况并非一直发生,它来来往往,而不是在特定的网页上。

我没有在网站上使用任何ajax,而且我也尝试按照其他一些线程重新安装aspnet,我还检查了this thread有关响应标头,但我仍然遇到了这个问题。

注意:我正在使用带有ActionResult的图像控制器将数据库中的图像作为文件返回

Function GetImage(ByVal id As Integer?) As ActionResult


        Dim record = rep.GetArticlePhoto(id)


        Return MyBase.File(record.ArticlePhotoContent.ToArray, "image/jpeg")



End Function

2 个答案:

答案 0 :(得分:2)

事实证明,当你使用

MyBase.File(img.GetBytes, "image/jpeg")

它将返回FileContentResult

如果您使用

MyBase.File(Server.MapPath("~/content/images/na.png"), "image/png")

它将使用另一个返回不同对象类型的重载,即FilePathResult

不同的重载会返回不同的对象类型 - 这就是我错过的方式

似乎others在FilePathResult上遇到了一些问题,所以我换了它, 现在 它运行正常。

答案 1 :(得分:0)

有时为什么xhtml+xml的最可能原因是您的页面生成错误并返回默认的.net异常页面。这可能发生,因为当您使用ArticlePhotoContentNothing .ToArray()时,recordNothing

我会像这样修改你的功能。

Function GetImage(ByVal id As Integer?) As ActionResult
    Dim record = rep.GetArticlePhoto(id)
    If(record IsNot Nothing AndAlso record.ArticlePhotoCount IsNot Nothing) Then
        Return MyBase.File(record.ArticlePhotoContent.ToArray, "image/jpeg")
    Else
        Return New HttpNotFoundResult()
    End If
End Function

但是,这并未考虑rep.GreatArticlePhoto可能导致异常。您可以将其包装在try-catch块中。