2011-06-23 53 views
2

我正在使用MVC 3 Razor,並且我得到了一個「另存爲」對話框,其中包含「未知文件類型」,內容爲Html頁面在網站上的多個頁面上,此對話框顯示在IE上,並且在Firefox上顯示一個錯誤頁面,其中顯示「XML解析錯誤」。IE在頁面上顯示「另存爲」對話框加載MVC

有時當「另存爲」出現時,我檢查了響應標題並顯示HTML頁面的「Content-type」是「application/xhtml + xml;字符集= 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 
+0

對不起,這裏沒有足夠的信息來回答你。可能你以某種方式返回text/xml作爲內容類型。但是我沒有足夠的信息來猜測這是怎麼回事。 – Ariel

+0

我只是需要一些指向哪裏尋找這樣的問題。 – Buaziz

+0

安裝Fiddler,當它再次運行連接到站點時,您將能夠確切地看到來回發送的內容,這將告訴您爲什麼IE認爲它是一個文件下載。某種程度上,MIME類型可能是錯誤的。有了這些信息,我們將能夠幫助您解決問題。 – Tridus

回答

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塊中。

+0

實際上整個方法有多個try catch和驗證程序,但爲了簡單起見,我刪除了代碼。但是我要調查你對錯誤的想法,你可能會給我一些線索。 – Buaziz

+0

你們是否真的認爲「內容類型」不斷從圖像控制器變爲「xhtml + html」,或者它可能是其他東西丟失? ,[這裏是網站](http://www.kathima.com/),但錯誤只出現約3%的頁面瀏覽量,所以你可能看不到它。 – Buaziz

2

事實證明,當你使用

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

它會返回一個FileContentResult

,如果你使用

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

它將使用其他重載返回不同的對象類型,FilePathResult

不同NT重載返回不同的對象類型 - 這就是我錯過了

似乎others有一些問題FilePathResult,所以我換了,並現在它工作正常。