运行没有视图的MVC控制器操作?

问题描述:

我有一个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

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

public void DoSomething() 

我没有看在很多细节的动作结果的代码,但必须与你的行动的结果是错误的。你是否从继承ActionResult类的其他行为结果?你有没有调用base.ExecuteResult?如果是这样,那就可以解释为什么它正在寻找这个观点。我创建了几个自定义控制器操作来返回各种文件类型,并且他们从不查找视图。

我同意答案的评论说退货无效。这绝对是一个黑客。你不应该在你的动作中调用ExecuteResult。您基本上是直接写入控制器操作的响应流。显然它可行,但它确实不适合MVC模型。

这在我们拥有数百或数千个视图的场景中非常有用。在这种情况下,我们是否会创建数百或数千个控制器操作?当然不是,那我们该如何解决呢?

在MVC架构中,控制器类包括一种方法,HandleUnknownAction(),执行每当我们试图调用一个动作(或者当我们要求没有匹配操作方法的视图)中的控制器上不存在。

enter image description here

我相信,这个回答你的问题。