2014-08-27 3 views
0

У меня есть область с именем Admin с моделью CMSPage. Мой контроллер называется CMSPagesController. Я хотел бы создать пользовательский маршрут, так что я могу использовать просто страницу вместо CMSPage, так что я подумал, создавая следующий пользовательский маршрут, он будет работать, но Нету:Как создать пользовательский маршрут в MVC

routes.MapRoute(
    "AdminPages", 
    "Admin/Pages/{action}/{id}", 
    new { controller = "CMSPages", action = "Index", id = UrlParameter.Optional } 
); 

Может кто-то пожалуйста, привести меня в правильном направлении ?

+1

Вы поместили этот код перед маршрутом по умолчанию? –

+0

Да, и цель состоит в том, чтобы сохранить внутренние имена объектов класса именно так, внутренние. Тогда для моего приложения я бы не хотел, чтобы это внутреннее имя, поэтому я хотел переименовать его с помощью настраиваемого маршрута в простое имя для приложения (CMSPage == Page). Я вижу ответ Ниерадж ниже, но я думаю, что попробовал тот же пример, и он не сработал. Я собираюсь дать ему еще одну попытку и сообщить о моих выводах. – Keith

ответ

0

Ой с моей стороны. Я забыл, что процесс регистрации области также происходит. Проблема в том, что я хочу получить доступ к этому контроллеру из области, в которой я его создал (Admin). Таким образом, там должна быть обычная регистрация маршрута. Не в моем RouteConfig.cs (см. Ниже). Спасибо за ответ Neeraj, вы ответ не ошибаетесь, просто не исправьте мой вопрос, относящийся к области.

using System.Web.Mvc; 

namespace WebApplication1.Areas.Admin 
{ 
    public class AdminAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Admin"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      // This is where the custom route has to be registered for me to access 
      // it from my area. 
      context.MapRoute(
       "Admin_pages", 
       "Admin/Pages/{action}/{id}", 
       new { action = "Index", 
         controller = "CMSPages", 
         id = UrlParameter.Optional } 
      ); 

      context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 
} 
0
using System.Web.Mvc; 
using System.Web.Routing; 
namespace MvcApplication1 
{ 
public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Blog",           // Route name 
      "Archive/{entryDate}",       // URL with parameters 
      new { controller = "Archive", action = "Entry" } // Parameter defaults 
     ); 
     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with  parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 
    } 
    protected void Application_Start() 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 

}

Порядок маршрутов, которые добавляются в таблицу маршрутизации важно. Наш новый настраиваемый маршрут блога добавляется до существующего маршрута по умолчанию. Если вы измените порядок, тогда маршрут по умолчанию всегда будет вызываться вместо пользовательского маршрута.

Пользовательский маршрут блога соответствует любому запросу, который начинается с/Archive /. Таким образом, он соответствует всем следующим адресам:

/Архив/12-25-2009

/Архив/10-6-2004

/Архив/яблоко

Обычай маршрутные карты входящий запрос к контроллеру с именем Archive и вызывает действие Entry(). Когда вызывается метод Entry(), дата ввода передается как параметр с именем entryDate.

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