2010-03-31 95 views
1

我有一个非常简单的MVC网站,当试图在开始时加载页面时返回404未找到错误。我正在寻找一些方向来解决这个问题,因为从错误信息中没有什么可以继续。MVC页面没有显示,404没有找到

更新:问题似乎是由于我通过右键单击该文件并设置为起始页来设置起始页的缘故。这导致Visual Studio尝试直接加载该页面。当修改url以使用路由规则访问页面时,页面将按照Keltex的建议正确加载。

我得到的错误是:

说明:HTTP 404。您正在查找的资源(或它的 的一个依赖项)可能已被删除,更名,或暂时无法使用 。请检查以下URL并确保它正确拼写 。

请求的URL:/Views/Other/Index.aspx

下面我包括为各个部分的代码,路由规则默认:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults 
); 

该网站使用嵌套MasterPages ,不确定这是否涉及问题,但试图尽可能包含更多细节。

我:

控制器

  • OtherController

浏览:

  • 共享文件夹:
    • 的Site.Master
  • 其他文件夹:
    • Other.Master
    • 的Index.aspx

的Site.Master代码:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head runat="server"> 
     <title> 
      <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> 
     </title> 
    </head> 
    <body> 
     <div> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server"> 
      </asp:ContentPlaceHolder> 
     </div> 
    </body> 
</html> 

Other.Master代码:

<%@ Master Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<asp:Content ID="OtherTitle" ContentPlaceHolderID="TitleContent" runat="server"> 
    OTHER PAGE - MASTER TITLE 
    <asp:ContentPlaceHolder ID="OtherPageTitle" runat="server"> 
    </asp:ContentPlaceHolder> 
</asp:Content> 

<asp:Content ID="OtherContent" ContentPlaceHolderID="MainContent" runat="server">  
    Some other content. 
    <asp:ContentPlaceHolder ID="PageContent" runat="server">  
    </asp:ContentPlaceHolder> 
</asp:Content> 

指数。ASPX代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Other/Other.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<asp:Content ID="IndexTitle" ContentPlaceHolderID="OtherTitle" runat="server"> 
    Home 
</asp:Content> 

<asp:Content ID="IndexContent" ContentPlaceHolderID="OtherContent" runat="server"> 
    Index content 
</asp:Content> 

OtherController代码

namespace MVCProject.Controllers 
{ 
    public class OtherController : Controller 
    { 
     // 
     // GET: /Member/ 

     public ActionResult Index() 
     { 
      // Have also tried: 
      // return View("Index", "Other.Master"); 

      return View(); 
     } 
    } 
} 

回答

2

我觉得URL应该是:

/Other 

/Views/Other/Index.aspx 

的网址通常不与/Views前缀。这只是视图所在的文件夹。由于这是默认操作,因此通常未指定视图Index。最后,扩展.aspx通常不在MVC中指定。如果你要拿出作为网站的默认页面这个页面,你需要改变你的路由规则是这样的:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Other", action = "Index", id = UrlParameter.Optional} // Parameter defaults 
); 

(请注意,默认控制器从HomeOther的变化)

+0

修改我在浏览器中访问的url会导致页面加载。 – mwright 2010-03-31 22:02:24

+0

@mwright。首次启动应用程序时使用的URL。或者对上面的路由进行更改,使其他控制器成为默认控制器。 – Keltex 2010-03-31 22:05:25

2

是否有项目属性对话框中指定的任何特殊URL或路线?

这需要是路由或URL,而不是.aspx页面。

alt text

+0

是的,当我在页面上右键单击并将其设置为开始页面时,这已被修改。我将它改为指向“其他”文件夹,并将路由规则修改为使用“OtherController”。谢谢。 – mwright 2010-03-31 22:10:52

1

404消息似乎表明您正尝试直接在Web浏览器中访问视图。它是否正确?你不应该访问网址/其他/索引?

+0

这很有帮助,谢谢。 – mwright 2010-03-31 22:14:45

相关问题