Правильный процесс для маршрутизации с административным сайтом - PullRequest
1 голос
/ 07 октября 2010

Я создаю свой первый сайт Asp.Net MVC2 и сейчас пытаюсь добавить область / Admin на сайт.

Я не хочу, чтобы эта область была видна основной группе пользователей, поэтому будет доступна только при вводе http://Intranet/Admin

У меня есть NewsController для моих постоянных пользователей, но мне также нужен Admin NewsController, и я не уверен, как настроить иерархию классов и папки, чтобы при добавлении представлений они находились в правильном месте.

Внутри моего Global.Asax.cs я добавил, и маршруты разрешаются правильно.

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new string[] { "Intranet.Controllers" } 
);

routes.MapRoute(
    "Admin", // Route name
    "Admin/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
      new string[] { "Intranet.Controllers.Admin" } 
);

И в иерархии папок я настроил

Views/
     Admin/
     News/
         ...I want the new view to go here...

В контроллерах

Controllers/
    Admin/
        AdminController.cs
        NewsController.cs (this is the one i want for administration)
    NewsController.cs (this is the regular one for viewing the list, specific item etc)

Проблема, с которой я сталкиваюсь, заключается в том, что когда я захожу в admin / NewsController.cs в Index и Add View, он пытается создать его в /News/Index.aspx, а не /Admin/News/Index.aspx.

Это код для моего администратора новостей контроллера Controllers / Admin-> Add-> Controller

namespace Intranet.Controllers.Admin
{
    public class NewsController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

Есть что-то, что я делаю неправильно, или что я должен изменить, чтобы при добавлении представлений они создавались в каталоге / Admin / {area}.

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Поскольку вы используете MVC2, самый простой способ решить эту проблему - создать фактическую MVC «Область» для раздела администратора.Прямо сейчас вы делаете все в разделе по умолчанию и просто используете папку администратора.Если вы создадите папку области администратора (под областями общеизвестного расположения), то у вас будет AdminAreaRegistration - где вы будете настраивать маршруты администратора.Поскольку вы будете делать это как часть области, для сегмента «область» будет использоваться первый сегмент URL «/ Admin».Это устранит неоднозначность, какой контроллер использовать, и правильно подберет нужный вам контроллер.Таким образом, ваша структура папок будет:

/Areas
    /Admin
        /Controllers
            NewsController.cs
etc.
0 голосов
/ 07 октября 2010

Когда вы пытаетесь создать представление для существующего действия контроллера, оно всегда создается в корневой папке представлений. Маршрут по умолчанию для представления всегда указывает на корень папки представлений.

Например:

 Controllers
     Admin
         AdminController.cs
         HomeController.cs
     HomeController.cs

В этой иерархии оба HomeController внутри Admin и root совместно используют одни и те же представления в папке представлений.

Views
    Home
        Index.aspx

Если вы не вернете указанный View () во всех ActionResults вашего HomeController внутри папки администратора ваших контроллеров. Он будет сопоставлен с определенным видом.

Пример, ActionResult внутри HomeController.cs папки Admin в контроллерах.

namespace Intranet.Controllers.Admin
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View("Home/Index");
        } 
    }
}

Это будет отображено в папке Views следующим образом

Views
    Admin
        Home
            Index.aspx

Но если вы не укажете путь просмотра при возврате представления в ActionResult, он будет отображаться в расположение представлений по умолчанию, подобное этому.

Views
    Home
        Index.aspx

Причина этого заключается в том, что даже если вы указываете маршруты в Global.asax, то есть только для отображения, на какой контроллер должен указывать URL-адрес, а не в папку Views.

Когда вы щелкаете правой кнопкой мыши и создаете представление на ActionResult любого подуровня контроллеров, оно всегда создается в корне папки представлений для соответствующего контроллера.

...