MVC页面未显示,404未找到

时间:2010-03-31 21:52:10

标签: c# asp.net-mvc master-pages

我有一个非常简单的MVC网站,它在尝试加载页面时返回404未找到的错误。我正在寻找解决此问题的方向,因为错误消息中没有任何内容可以继续。

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

我得到的错误是:

  

描述:HTTP 404.您正在寻找的资源(或其中一个   依赖项)可能已被删除,名称已更改,或暂时   不可用。请查看以下网址,并确保拼写完整   正确。

     

请求的网址:/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>

其他。主要代码:

<%@ 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>

Index.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>

其他控制器代码

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

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

            return View();
        }
    }
}

3 个答案:

答案 0 :(得分:2)

“项目属性”对话框中是否指定了特殊的URL或路径?

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

alt text

答案 1 :(得分:2)

我认为网址应为:

/Other

不是

/Views/Other/Index.aspx

网址通常不以/Views为前缀。这只是视图所在的文件夹。通常还没有指定View Index,因为这是默认操作。最后,MVC中通常没有指定扩展.aspx。如果您希望此页面作为站点的默认页面出现,则需要将路由规则更改为如下所示:

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

(请注意默认控制器从Home更改为Other

答案 2 :(得分:1)

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