我在发布MVC项目时遇到了问题。当我发布并将所有内容上传到Web服务器时,我得到了这个:
[InvalidOperationException: The view 'Index' or its master could not be found. The following locations were searched:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx]
奇怪的是,Index.aspx存在于〜/ Views / Home /中,但IIS无法在那里找到它。如果我将整个项目复制到Web服务器并让asp.net动态编译它就像一个魅力。
我的路由代码:
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
routes.MapRoute("Root", "", New With {.controller = "Home", .action = "Index", .id =""})
我在Windows 2008 Web服务器上使用IIS7。 ASP.NET MVC 1.0,Visual Studio 2008.我在Windows 7上尝试使用IIS7本地 - 同样的错误。
更新 - 我创建了一个新的MVC项目,并将所有文件添加到其中。引用项目已被引用为已编译的二进制文件。在发布“只运行应用程序所需的文件”后,我得到了同样的错误。
答案 0 :(得分:1)
这个问题的解决方案与它的表现一样奇怪。
我的主代码文件被声明为Partial而不是Public,我的主要定义是
<%@ Master Language="VB" Inherits="SiteFrontPageMaster" ClassName="SiteFrontPageMaster" CodeFile="SiteFrontPageMaster.Master.vb" %>
它应该是
<%@ Master Language="VB" Inherits="mymvcproject.SiteFrontPageMaster" CodeBehind="SiteFrontPageMaster.Master.vb" %>
为什么Cassini可以接受的东西而不是IIS的东西超出了我的理解能力。我只希望这个答案可以让别人省下我的头痛。
答案 1 :(得分:0)
检查Index.aspx的母版页是否也存在。
如果您正在使用“网站”项目,请尝试在发布网站时选择“允许此预编译网站可更新”选项。
如果您正在使用“Web应用程序”项目,请尝试在发布时选择“复制 - 所有项目文件”选项。
还尝试仅复制视图。我认为预编译的ASP.NET MVC项目由于标记文件而无法正常工作(.aspx和ascx文件在预编译时被替换为标记文件)。
如果您使用的是IIS 6或更低版本,请查看asp.net mvc - http://www.asp.net/learn/mvc/tutorial-08-cs.aspx的部署指南。
答案 2 :(得分:0)
1)检查您的Index.aspx是否包含在项目中。 (存在于发布结果文件夹中)本地在VS它可能有效,但在发布时它不会被复制。
2)检查项目中是否包含Views / web.config文件 - 它影响了ASP.NET MVC编译视图。
3)检查Index.aspx是否具有Build Action = Content(在属性窗口中)。
答案 3 :(得分:0)
检查服务器上的权限,确保asp.net工作进程对views文件夹,子文件夹和文件具有正确的权限。
另外,您的IIS实例是在Classic或Integrated Pipeline模式下运行吗?
答案 4 :(得分:0)
删除了上一个链接,这个更好地解释了http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/。
如果您正在使用本地asp.net webdev服务器进行开发,则必须删除一些HttpHandler和HttpModule,然后将它们添加回该部分。这告诉IIS7以集成模式运行它们。将应用程序部署到IIS 7服务器(包括MVC)时需要这样做。请参阅下面的参考示例:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="ScriptModule" />
<remove name="UrlRoutingModule" />
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated" />
<remove name="ScriptHandlerFactory" />
<remove name="ScriptHandlerFactoryAppServices" />
<remove name="ScriptResource" />
<remove name="MvcHttpHandler" />
<remove name="UrlRoutingHandler" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
希望有所帮助,
涡流
PS。旧链接http://www.asp.net/(S(ywiyuluxr3qb2dfva1z5lgeg))/learn/mvc/tutorial-08-cs.aspx
答案 5 :(得分:0)
您正在使用的View(“Index”,...)的确切调用是什么。 也许第二个参数是一个字符串 - 在这种情况下,使用View-方法的另一个重载,其中第二个参数是母版页的名称。
解决方案:只需将第二个参数转换为对象。
答案 6 :(得分:0)
由于它在复制整个项目时有效,或许您没有复制所需的所有文件?确保将任何非标准参考设置为复制本地,并使用构建菜单下的内置发布功能获取所需的文件让项目运行。
答案 7 :(得分:-1)
尝试将.aspx附加到URL的控制器部分,例如http://myserver/appname/Index.aspx/Home - 如果我没记错的话,IIS7会对MVC应用程序出现问题,除非您正确显示控件/操作URL a)使用.aspx后缀引用控制器部分 b)调整服务器上的设置,但这会影响该服务器上的所有应用程序 c)加载插件 我找到了一篇很好的文章,但我找不到它,搜索一下,我相信如果.aspx解决方案不适合你,你会自己找到它