2010-03-31 11 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

Просмотров:

  • Shared Folder:
    • 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> 

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> 

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 

URL-адреса, как правило, не начинаются с префикса /Views. Это только папка, в которой расположены представления. Также обычно View Index не указан, поскольку это действие по умолчанию. Наконец, расширение .aspx обычно не указано в MVC. Если вы хотите эту страницу, чтобы придумать, как страницы сайта по умолчанию, необходимо изменить правила маршрутизации, чтобы выглядеть следующим образом:

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

(обратите внимание на изменение контроллера по умолчанию от Home к Other)

+0

Изменение URL-адреса, к которому я обращался в браузере, вызывает загрузку страницы. – mwright

+0

@mwright. URL-адрес, который вы используете при первом запуске приложения. Или внесите изменения в маршрутизацию, которую я поставил выше, чтобы ваш другой контроллер был контроллером по умолчанию. – Keltex

2

Есть ли какие-либо специальные URL или маршрут, заданный в диалоговом окне свойств проекта?

Это должен быть маршрут или URL, а не страница .aspx.

alt text

+0

Да, это было изменено, когда я щелкнул правой кнопкой мыши на странице и сказал, что установлен как стартовая страница. Я изменил его, указав на папку «Другое» и изменив правила маршрутизации, чтобы использовать «OtherController». Благодарю. – mwright

1

Сообщение 404, похоже, предполагает, что вы пытаетесь получить доступ к представлению непосредственно в веб-браузере. Это верно? Разве вы не должны обращаться к URL/другому/индексу?

+0

Это было полезно, спасибо. – mwright