2009-04-15 4 views
0

В моем веб-приложении. Я хочу настроить маршрут следующим образом:C# asp.net mvc 1.0 routing

/document/quality/index 
/document/general/index 

/document/quality/detail/[id] 
/document/general/detail/[id] 

Как вы можете видеть, у меня есть два вида документов: общее и качественное. Каков наилучший способ установить это в моем файле global.asax? Я попытался следующие, но я не получить его работы:

routes.MapRoute(
    "QualityDocument", 
    "Document/Quality/{action}/{id}", 
    new { controller = "Document", action="Index", id= ""} 
    ); 

routes.MapRoute(
    "GeneralDocument", 
    "Document/General/{action}/{id}", 
    new { controller = "Document", action = "Index", id = "" } 
    ); 

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

EDIT

У меня он работает прямо сейчас, но когда я изменить действие = «» в моем asax файл это Безразлично «т больше работать:

Global.asax:

routes.MapRoute(
    "GeneralDocument", 
    "Document/General/{action}/{id}", 
    new { controller = "Document", action = "blaat", id = "" } 
    ); 

DocumentController:

public void blaat(int? id) 
{ 
    Response.Write("algemeen"); 
    // return View(); 
} 

Теперь я получаю сообщение об ошибке «Ресурс не найден». Но когда я использую индекс вместо blaat, он работает. Как так?

ответ

1

вы должны быть в состоянии только префикс маршрута с «Документ», а затем установить значения по умолчанию, как:

routes.MapRoute("DocumentView", 
       "Document/{controller}/{action}/{id}", 
       new { controller = "General", action="Index", id = "" } 
      ); 

запомнить с маршрутизацией вы хотите быть полностью определяющим! при настройке маршрута. не допускайте этих неожиданных маршрутов через: D

Ознакомьтесь с презентацией Скотта Гензельмана в MIX очень забавно, и вы получите отличные советы!

http://www.hanselman.com/blog/Mix09FirstHalfRollupAndSessionVideos.aspx

0

Попробуйте это:

routes.MapRoute(
    "QualityDocument", 
    "Document/Quality/index", 
    new { controller = "Document", action="Index" } 
); 

routes.MapRoute(
    "Default",            // Route name 
    "Document/Quality/details/{id}",        // URL with parameters 
    new { controller = "Document", action = "Details", id = "" } // Parameter defaults 
); 
1

Возможно добавить в атрибуте контроллера, но ограничить его быть делопроизводителя.

routes.MapRoute(
    "QualityDocument", 
    "{controller}/Quality/{action}/{id}", 
    new { controller = "Document", action="Index", id= ""}, 
    new { controller = "Document" } 
); 
routes.MapRoute(
    "GeneralDocument", 
    "{controller}/General/{action}/{id}", 
    new { controller = "Document", action = "Index", id = "" }, 
    new { controller = "Document" } ); 
+0

Что вы имеете в виду путем добавления в атрибуте контроллера? Как это работает? – Martijn

+0

Я просто имею в виду put {controller} в вашем шаблоне. Мне было интересно, не удалось ли вывести значение контроллера, поскольку оно не появилось в вашем шаблоне. – tvanfosson

+0

Немного подумав об этом, вам не нужно вытаскивать свойство типа документа, чтобы знать, как различать эти два? Это может потребовать, чтобы пользовательский обработчик маршрута выполнял правильно. – tvanfosson