2015-03-24 2 views
1

В моем приложении у меня есть область «Участник». За пределами этой области я имею папку с именем «Generic», которая имеет контроллер «DataBindController». Этот контроллер будет использоваться во всех областях. Поэтому, чтобы сохранить его распространенным, я сохраняю его в отдельной папке за пределами областей.
Мой маршрут конфигурации выглядит следующим образом:Как вызвать контроллер за пределами области?

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

     var ObjRoute = routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults:new {controller = "Login", action = "MemberLogin", id = UrlParameter.Optional}, 
      namespaces: new string[] { "MyApp.Generic.*" }). 
      DataTokens = new RouteValueDictionary(new { area = "Member"}); 
     //ObjRoute.DataTokens["UseNamespaceFallback"] = false; 
    } 
} 

Вот структура проекта. Project directory structure

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

namespace MyApp.Generic 
{ 
    public class DataBindController : Controller 
    { 
     public ActionResult Test() 
     { 
      return Content("Test"); 
     } 
    } 
} 

Я получаю следующее сообщение об ошибке, когда я называю контроллер тестов с помощью "http://localhost/MyApp/Generic/DataBind/Test"

Ошибки в пути:/MyApp/Generic/DataBind/Test Контроллер для пути '/ MyApp/Generic/DataBind/Test' не найден или не реализует IController.

Просьба дать мне некоторое представление по этому вопросу.

+0

'/ DataBind/Test'. Каталоги не имеют отношения к маршрутизации. –

ответ

2

Ваш адрес не соответствует указанному маршруту. Generic - это просто папка. MVC не заботится о папке контроллер находится в

правильным должно быть так:.

http://localhost/MyApp/DataBind/Test

так DataBind будет controller и TestAction.

Update:

ваш маршрут

{controller}/{action}/{id} 

Если у вас есть в вашем адресе Generic, Asp.net вышлет части таким образом: Generic является Controller, DataBind является Action и тест является Id. конечно, он не может найти такую ​​вещь. Но когда вы удаляете Generic, каждая часть переходит в ее реальное место.

Чтобы Generic в адрес, вы должны изменить свой маршрут к этому:

Generic/{controller}/{action}/{id} 

Чтобы узнать больше о маршрутизации:

http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/asp-net-mvc-routing-overview-cs

+0

Да! Он работает, но вы можете объяснить, как это работает, когда я удаляю имя папки (namespace) из url –

+0

@ RasmitaDash: я обновил свой ответ. Проверьте это, пожалуйста. –

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