2017-01-17 4 views
5

Я использую ASP.NET MVC и пытаюсь создать подпапку контроллера. Я посмотрел на другую должность на этом сайте и попробовал то, что я смог найти в Интернете, но он по-прежнему работает в этот вопрос:ASP.NET MVC Controller SubFolder

HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. 

скриншот ниже подкаталог я создал в моей папке контроллера.

enter image description here

и вот скриншот моего просмотра папки.

enter image description here

И вот что я пытался в моем RouteConfig.cs файл

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: "AdminSubForder", 
     url: "admin/{controller}/{action}/{id}", 
     defaults: new { controller = "HomeAdmin", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

Но мой вложенный все еще не работают. Что я здесь делаю неправильно?

+2

вы должны указать имя пространства имен контроллера в Map.Route, чтобы он мог найти контроллер. Обратитесь к этому сообщению http://stackoverflow.com/questions/17178688/controller-in-sub-folder Кроме того, перенесите свой маршрут администратора при первом размещении, так как маршрутизация должна определяться как наиболее конкретная для наименее специфичной. –

+0

@KD в файле RouteConfig.cs? – user979331

+0

Следуйте по ссылке: http://stackoverflow.com/questions/33802430/subfolder-in-controllers-asp-net-mvc – sebu

ответ

3

попробовать следующие вещи ...

сначала определить свой маршрут по следующим образом ... Маршрутизация должна быть определена из Большинство Конкретная к наименее специфических моделей

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

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


     } 

если он все еще не работает, попробуйте добавить название сборки вашего контроллера, как указано в следующем сообщении. Controller sub folder

Также сообщите нам, какой URL-адрес вы печатаете для доступа к странице.

+0

Этот URL-адрес, который я пытаюсь достичь: http: // localhost/admin/HomeAdmin/Index – user979331

+0

Я пробовал ваш код, новая ошибка: 'Указатель 'или его мастер не был найден, или механизм просмотра не поддерживает найденные местоположения. Были обысканы следующие местоположения: ' – user979331

+1

это на самом деле отлично! это означает, что теперь ваш Url работает. Следующая проблема заключается в том, чтобы помочь MVC найти путь к просмотру. Он должен был предоставить вам список найденных путей. Теперь нам нужно убедиться, что он рассматривает наш путь. Как я вижу, ваш взгляд находится в Views/admin/homeadmin /. мы должны убедиться, что MVC должен искать этот путь, чтобы найти связанный вид –

2

В соответствии с архитектурой MVC представление отображается из подпапки, названной именем контроллера внутри папки «Виды». Я не думаю, что вложенность папки внутри Views будет работать для вас. Вместо этого, если вы хотите организовать свои папки, вы можете выбрать «Районы».

+0

Что вы подразумеваете под «Районами»? Это новая концепция в VS? –

+1

@KonradViltersten Да, это концепция в MVC. Область позволяет разбить большое приложение на более мелкие единицы, где каждая единица содержит отдельную структуру папок MVC и автоматически обрабатывает маршрутизацию контроллера и рендеринг видов внутри области. – LKC

0

Обычно, когда вы добавляете контроллер (или любой файл класса) в папку (или подпапку), Visual Studio будет изменять пространство имен в файле класса для соответствия этой папке. Итак, в вашем случае вместо того, чтобы иметь пространство имен myprojectname.controller в вашем классе, оно будет иметь пространство имен myprojectname.controller.admin.

Решение? Ну, я делаю это все время и имею контроллеры внутри кучи папок для организации моего кода. Самый простой способ - сначала добавить контроллер в папку «Контроллер». Таким образом, у него будет собственное пространство имен. Затем просто перетащите файл в папку, в которую вы хотите организовать его. Итак, всякий раз, когда вы создаете контроллер, убедитесь, что вы создали его в папке «Контроллер». Я просто щелкаю правой кнопкой мыши по папке «Контроллер» и создаю контроллер. Затем перетащите файл в нужные папки.

Смежные вопросы