我有一个ExcelResult操作结果,它基于Stephen Walther tip返回Microsoft Excel文档。基本上它只是将一个流写入响应。在调试VS 2010(ASP.NET Dev Server)时,它运行正常,但是当我在IIS 6盒子上运行它时,我收到以下错误:
找不到视图'GenerateExcel'或其主文件。搜索了以下位置: 〜/浏览/首页/ GenerateExcel.aspx 〜/浏览/首页/ GenerateExcel.ascx 〜/查看/共享/ GenerateExcel.aspx 〜/ Views / Shared / GenerateExcel.ascx
没有关联的View,因此没有文件,但不应该有。我做错了什么?
更新
通过简单地返回void而不是ActionResult,我不再有这个问题了。我没有返回ExcelResult,而是明确地调用它的ExecuteResult方法,该方法正在写入输出流。
之前
public ActionResult GenerateExcel()
{
return this.Excel(parameters);
}
后
public void GenerateExcel()
{
ExcelResult excelResult = this.Excel(parameters);
excelResult.ExecuteResult(null);
}
之后,我的NTLM身份验证出现了安全问题,但是他们“离开了”(意思是我希望他们回来)。但就目前而言,一切正常。
答案 0 :(得分:16)
确保您的操作方法不会返回ActionResult:
public void DoSomething()
答案 1 :(得分:5)
在我们拥有数百或数千个视图的情况下,这非常有用。在这种情况下,我们会创建数百或数千个控制器操作吗?当然不是,那我们怎么解决呢?
在MVC框架中,控制器类包括一个方法HandleUnknownAction(),该方法在我们尝试在不存在的控制器上调用操作时(或当我们请求没有匹配操作方法的视图时)执行。
我相信,这可以回答你的问题。
答案 2 :(得分:0)
我没有详细查看操作结果的代码,但是您的操作结果一定有问题。你是否继承了一些其他的行动结果,而不是ActionResult类?你有没有打电话给base.ExecuteResult?如果是这样,那将解释为什么它正在寻找视图。我创建了几个自定义控制器操作来返回各种文件类型,但它们从不寻找视图。
我同意对答案的评论说要归还无效。这肯定是一个黑客。您不应该从您的操作中调用ExecuteResult。您基本上是直接从控制器操作写入响应流。显然它有效,但它确实不适合MVC模型。