Folderologia widoków w ASP.NET MVC 5

Folderologia widoków w ASP.NET MVC 5
DU
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:143
0

Cześć,
Chciałbym się Was zapytać w jaki sposób mogę pogrupować widoki w ASP MVC 5?
Mogę kontrolery pogrupować dla admina i zwykłe np. Controllers/Admin/HomeController, Controllers/Public/HomeController i to działa ale chciałbym też zrobić tak samo z widokami i móc przy tym korzystać ze skrótów tj. ppm na akcji i go to view/add view.

Macie jakieś pomysły jak to zrobić?

Z góry dziękuję za odpowiedzi,
Pozdrawiam

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Wrocław
0

Do tego służą Area, w każdym z nich umieszczasz kontrolery/widoki/viewmodele (oczywiście w odpowiednich podkatalogach) związane z daną sekcją aplikacji.

DU
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:143
0

Dziękuję bardzo :)
to takie pytanie już dotyczące obszarów, jeśli mam w Areas foldery Admin i Public to w jaki sposób mogę określić, który z nich będzie ładowany jako pierwszy?

JP
  • Rejestracja:ponad 7 lat
  • Ostatnio:5 miesięcy
  • Postów:1065
1

Może w routingu?
Strzelam bo się nie znam ale chętnie się dowiem czy trafiłem:)

somekind
Doskonały strzał milordzie! ;)
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Wrocław
0
duzy napisał(a):

Dziękuję bardzo :)
to takie pytanie już dotyczące obszarów, jeśli mam w Areas foldery Admin i Public to w jaki sposób mogę określić, który z nich będzie ładowany jako pierwszy?\

A co to w ogóle znaczy "ładowany jako pierwszy"?

DU
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:143
0

Ładowany jako pierwszy - miałem na myśli stronę startową bądź też moduł, który się włączy/załaduje po wejściu na np. http://localhost/Example.WebIU/ czyli żebym nie musiał pisać w pasku adresuhttp://localhost/Example.WebIU/Public/News/Index

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Wrocław
0

No to musisz default route w routingu skonfigurować.

DU
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:143
0

No właśnie w tym problem bo w RouteConfig mam takie coś:

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

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { area = "Public", controller = "News", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "Example.WebUI.Areas.Public.Controllers" }
            );
        }

Przy debugu jest wywoływany dobry kontroler ale już widok jest zły zwracany, chyba, że usunę widok z "głównego" projektu i zostaną tylko te w Areas to wtedy mam taki błąd:
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/News/Index.aspx ~/Views/News/Index.ascx ~/Views/Shared/Index.aspx ~/Views/Shared/Index.ascx ~/Views/News/Index.cshtml ~/Views/News/Index.vbhtml ~/Views/Shared/Index.cshtml ~/Views/Shared/Index.vbhtml

Więc złe miejsce jest przeszukiwane.

Utworzyłem silnik widoku:

Kopiuj
public class CustomLocationViewEngine : RazorViewEngine
    {
        public CustomLocationViewEngine()
        {
            AreaViewLocationFormats = new string[]
            {
                "~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/Public/Views/{1}/{0}.cshtml"
            };
        }
    }

oraz zmieniłem global.asax
protected void Application_Start()

Kopiuj
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(new CustomLocationViewEngine());
        }

Teraz błąd wygląda tak:
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/News/Index.cshtml ~/Views/News/Index.vbhtml ~/Views/Shared/Index.cshtml ~/Views/Shared/Index.vbhtml

Edit://
Problem rozwiązany. Usunąłem te silniki widoków i RegisterRoutes wygląda tak:

Kopiuj

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { area = "Public", controller = "News", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "Example.WebIU.Areas.Public.Controllers" } 
            );
        }

Natomiast PublicAreaRegistration tak:

Kopiuj
public class PublicAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Public";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Public_default",
                "{controller}/{action}/{id}",
                new { controller = "News", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
edytowany 3x, ostatnio: duzy

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.