2016-03-14 6 views
0

Я занимаюсь ASP.NET MVC, используя vs 2013, и написал простой проект с одним контроллером и представлением.ASP.NET MVC - Маршрутизация не работает

код

контроллер:

public class HomeController : Controller 
{ 
    // GET: Home 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult ShowMyHome() 
    { 
     return View("MyHome"); 
    } 
} 

"MyHome" вид Код:

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Hello World</title> 
</head> 
<body> 
    <div> 
     Welcome my first MVC page 
    </div> 
</body> 
</html> 

RouteConfig код:

public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

      ); 

      routes.MapRoute(
       name: "Home", 
       url: "Home", 
       defaults: new { controller = "Home", action = "ShowMyHome", id = UrlParameter.Optional } 
      ); 
     } 
    } 

, когда я запустить и установить URL-адрес строки на "http://mySite/Home/ShowMyHome", это работает хорошо. , но когда я бегу и установить URL-адрес строки на «http://mySite/Home», я получаю сообщение об ошибке:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Home/Index.aspx 
~/Views/Home/Index.ascx 
~/Views/Shared/Index.aspx 
~/Views/Shared/Index.ascx 
~/Views/Home/Index.cshtml 
~/Views/Home/Index.vbhtml 
~/Views/Shared/Index.cshtml 
~/Views/Shared/Index.vbhtml 

Это выглядит как маршрутизация «Home» не работает.

+0

Я бы рекомендовал использовать Отладчик маршрутов Фила Хаака. https://www.nuget.org/packages/routedebugger/. У вас есть указатель с именем? –

ответ

0

Вам нужно будет создать представление для индекса. В контроллере щелкните правой кнопкой мыши на Index() и выберите «Добавить вид».

Затем завершите работу мастера по тому, как вы хотите, чтобы этот вид отображался.

Редактировать: Основываясь на ответах, которые я вижу, я считаю, что может быть небольшое недоразумение. Вам не нужно создавать новый маршрут для каждого вашего контроллера. Обычно вы должны использовать маршрут по умолчанию и использовать Index как свою домашнюю страницу. Пользовательские маршруты, как правило, вступают в игру, когда вам нужно предоставить больше информации для вашего контроллера, чем просто/action/id.

+0

Я добавил вид. теперь я не получаю ошибку, а просто пустую страницу, а не строку «Приветствую мою первую страницу MVC», которую я получаю, когда устанавливаю «http: // mySite/Home/ShowMyHome» в URL-адресе. –

+0

Для индекса или для ShowMyHome? Вам необходимо иметь представление для каждого ActionResult в контроллере, к которому вы хотите подключиться. По умолчанию ваш маршрут настроен на «Индекс» (большинство проектов настроены таким образом по умолчанию), а это значит, что вам нужно иметь представление специально для индекса. Проверьте папку «Виды» в подпапке «Домой». У вас должно быть как минимум два файла * .cshtml - ShowMyHome.cshtml и Index.cshtml. –

+0

Чтобы поделиться этим HTML, поместите его в общий вид.В каждом представлении будет отличаться код Razor, специфичный для этого метода на контроллере. –

2

Проблема заключается не в маршрутизации, а в том, что ASP.NET не может найти ваше представление Index.cshtml. Вам нужно добавить представление для Index().

1
routes.MapRoute(
      name: "Home", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "ShowMyHome", id =UrlParameter.Optional } 
     ); 
+0

Он покажет страницу просмотра ShowMyHome для http: // mySite/Home –

2

У вас по-прежнему есть маршрут по умолчанию, указывающий на представление и действие «Указатель», которого не существует. Поместите свой собственный маршрут до маршрута по умолчанию, и ваша проблема должна быть решена.

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Home", 
      url: "Home", 
      defaults: new { controller = "Home", action = "ShowMyHome", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

     ); 

    } 
} 
3

Home Ваш маршрут не достигается, поскольку при переходе на ~/Home маршрут по умолчанию совпадают, при условии, что ваше имя контроллера HomeController.

Если вы хотите, чтобы ваш желаемый результат состоял в отображении ~/Home на ShowMyHome(), вам необходимо будет перенести свой собственный маршрут выше стандартного.

Вам не нужно определять отдельный маршрут для каждого создаваемого вами действия контроллера, в 9 раз из 10, маршрут по умолчанию - это нормально.