7

我在发布我的 MVC 项目时遇到问题。当我将所有内容发布并上传到网络服务器时,我得到了这个:

[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 项目,并将我的所有文件添加到其中。引用项目已被引用为已编译的二进制文件。发布“仅运行应用程序所需的文件”后,我得到了同样的错误。

4

8 回答 8

1

这个问题的解决方案和它的表现一样奇怪。

我的文件背后的主代码被声明为部分而不是公共,我的主定义是

<%@ Master Language="VB" Inherits="SiteFrontPageMaster"  ClassName="SiteFrontPageMaster" CodeFile="SiteFrontPageMaster.Master.vb"  %>

它应该是

<%@ Master Language="VB" Inherits="mymvcproject.SiteFrontPageMaster" CodeBehind="SiteFrontPageMaster.Master.vb" %>

为什么 Cassini 可以接受而不是 IIS 可以接受,这超出了我的理解能力。我只是希望这个答案可以减轻其他人的头痛。

于 2010-03-27T19:09:23.933 回答
0

检查 Index.aspx 的母版页是否也存在。
如果您使用的是“网站”项目,请尝试在发布站点时选择“允许此预编译站点可更新”选项。
如果您使用的是“Web 应用程序”项目,请尝试在发布时选择“复制 - 所有项目文件”选项。

也尝试只复制视图。我认为由于标记文件(.aspx 和 ascx 文件在预编译时被标记文件替换),预编译时的 ASP.NET MVC 项目不能很好地工作。

如果您使用的是 IIS 6 或更低版本,请查看 asp.net mvc 的部署指南 - http://www.asp.net/learn/mvc/tutorial-08-cs.aspx

于 2010-01-30T21:28:11.250 回答
0

1) 检查您的 Index.aspx 是否包含在项目中。(存在于发布结果文件夹中)在 VS 本地它可能有效,但在发布时它不会被复制。

2) 检查项目中是否包含 Views/web.config 文件 - 它会影响 ASP.NET MVC 编译视图。

3) 检查 Index.aspx 是否有 Build Action = Content(在属性窗口中)。

于 2010-02-18T18:30:33.617 回答
0

检查服务器上的权限,确保 asp.net 工作进程对视图文件夹、子文件夹和文件具有正确的权限。

另外,您的 IIS 实例是在经典模式还是集成管道模式下运行?

于 2010-02-21T15:36:14.000 回答
0

删除了上一个链接,这个链接解释得更好http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/

如果您使用本地 asp.net webdev 服务器进行开发,则必须删除一些 HttpHandlers 和 HttpModules,然后将它们添加回该部分。这告诉 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

于 2010-02-28T06:13:31.540 回答
0

您正在使用的对 View("Index", ...) 的确切调用是什么。也许第二个参数是一个字符串 - 在这种情况下,使用 View- 方法的另一个重载,其中第二个参数是母版页的名称。

解决方案:只需将第二个参数转换为对象。

于 2010-03-14T14:43:45.497 回答
0

由于它在复制整个项目时有效,也许您没有复制您需要的所有文件?确保将任何非标准引用设置为Copy Local并使用Build菜单下的内置Publish功能来获取项目运行所需的文件。

于 2010-03-24T11:56:01.457 回答
-1

尝试将 .aspx 附加到 URL 的控制器部分,例如http://myserver/appname/Index.aspx/Home - 如果我没记错的话,IIS7 存在 MVC 应用程序正确显示控制/操作 url 的问题,除非你 a)使用 .aspx 后缀参考控制器部分 b) 调整服务器上的设置,但这会影响该服务器上的所有应用程序 c) 加载插件 我找到了一篇很好的文章,但我找不到它,四处搜索并如果 .aspx 解决方案不适合您,我相信您会自己发现

于 2010-02-23T12:52:43.333 回答