2011-01-13 90 views
13

我有一個ExcelResult操作結果,它返回基於Stephen Walther tip的Microsoft Excel文檔。基本上它只是將一個流寫入響應。當調試VS 2010(ASP.NET開發服務器),它運行良好,但是當我上的IIS 6箱運行它,我得到以下錯誤:運行沒有視圖的MVC控制器操作?

The view 'GenerateExcel' or its master was not found. The following locations were searched: ~/Views/Home/GenerateExcel.aspx ~/Views/Home/GenerateExcel.ascx ~/Views/Shared/GenerateExcel.aspx ~/Views/Shared/GenerateExcel.ascx

沒有相關的意見,因此沒有文件,但不應該有。我究竟做錯了什麼?

UPDATE

通過簡單的迴歸,而不是一個ActionResult空虛,我不再有這個問題。我沒有返回ExcelResult,而是明確地調用它的ExecuteResult方法,它正在寫入輸出流。

以前

public ActionResult GenerateExcel() 
{ 
    return this.Excel(parameters); 
} 

public void GenerateExcel() 
{ 
ExcelResult excelResult = this.Excel(parameters); 
excelResult.ExecuteResult(null); 
} 

在那之後,我就安全問題與我的NTLM身份驗證,但他們 '走了'(意思是我希望他們回來)。不過,現在,一切正常。

+1

難道你不覺得說不清楚自己在做什麼(某些代碼或其他東西),你做錯了什麼有點難嗎?不幸的是我沒有心靈感應技能。 – 2011-01-13 19:34:06

+0

那麼你基本上可以查看鏈接上的代碼。它返回一個ActionResult,它真的是一個ExcelResult,它的ExecuteResult方法正在寫入輸出流。 – DougJones 2011-01-13 20:21:01

回答

13

確保您的操作方法不返回的ActionResult:

public void DoSomething() 
0

我沒有看在很多細節的動作結果的代碼,但必須與你的行動的結果是錯誤的。你是否從繼承ActionResult類的其他行爲結果?你有沒有調用base.ExecuteResult?如果是這樣,那就可以解釋爲什麼它正在尋找這個觀點。我創建了幾個自定義控制器操作來返回各種文件類型,並且他們從不查找視圖。

我同意答案的評論說退貨無效。這絕對是一個黑客。你不應該在你的動作中調用ExecuteResult。您基本上是直接寫入控制器操作的響應流。顯然它可行,但它確實不適合MVC模型。

3

這在我們擁有數百或數千個視圖的場景中非常有用。在這種情況下,我們是否會創建數百或數千個控制器操作?當然不是,那我們該如何解決呢?

在MVC架構中,控制器類包括一種方法,HandleUnknownAction(),執行每當我們試圖調用一個動作(或者當我們要求沒有匹配操作方法的視圖)中的控制器上不存在。

enter image description here

我相信,這個回答你的問題。

相關問題