2016-11-24 3 views
-2

Позвольте мне определить мою настройку здесь. У меня есть некоторые области, такие как 1. AreaA 2. AreaB 3. AreaC и 4. AreaGeneral. в AreaGeneral У меня есть один контроллер как home и GetData (paras), и он возвращает некоторые данные в частичной или полной форме страницы в angularjs. Если я использую эти два контроллера внутри AreaGeneral, тогда это нормально. но я хочу предоставить одни и те же контроллеры внутри других областей, как в A, B и AreaC, но там область и маршрут разные. и, что более важно, когда пользователь переходит в конкретную область, скажите, что AreaB обращается к контроллеру GetData (paras), тогда URL должен быть как .../AreaB/GetData вместо .../AreaGeneral/GetData, и маршрут должен работать в других областях: Что ж. Может ли кто-нибудь помочь мне, как это сделать, спасибо.Районы Маршрутизация в MVC 4 с angularjs

+1

GetData - это маршрутизируемое действие? Вероятно, было бы разумнее, чтобы различные контроллеры вызывали одно и то же действие через ajax или наследовали действие из класса BaseController. – Jecoms

+0

не могли бы вы быть более ясными по этому поводу или лучше объяснить мне, как я могу это сделать. или пример будет лучше – Khan

+0

Я не уверен, что смогу точно определить, что вы пытаетесь сделать, без примеров вашей структуры кода/области контроллера. – Jecoms

ответ

0

Givent, что вы уже AreaGeneral маршруты определены, как показано ниже:

public class AreaGeneralAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "AreaGeneral"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "AreaGeneral_default", 
      "AreaGeneral/{controller}/{action}/{id}", 
      new { controller = "Home", action = "GetData", id = UrlParameter.Optional } 
     ); 
    } 
} 

Вы можете зарегистрировать этот маршрут в AreaB:

public class AreaBAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get { return "AreaB"; } 
    } 
    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "AreaB_Getdata", 
      "AreaB/Home/Getdata", 
      new { controller = "Home", action = "GetData" }, 
      new string[] { "areastest.Areas.AreaGeneral.Controllers" }).DataTokens["area"] = "AreaGeneral"; 

     context.MapRoute(
      "AreaB_default", 
      "AreaB/{controller}/{actio‌​n}/{id}", 
      new { action = "Index", id = UrlParameter.Optional }); 

    } 
} 

так что пользователь может перемещаться в .../AreaB/Home/GetData и просмотреть страницу фактически обрабатывается внутри AreaGeneral.

+0

спасибо за ответ, но мне не нужно наследовать контроллер или что-то в этом роде. – Khan

+0

Нет, в AreaB не будет контроллера. –

+0

А как насчет URL-адреса, он изменится на .../AreaGeneral/GetData или останется .../AreaB/GetData при доступе к GetData из AreaB – Khan

0

Я использовал угловые услуги в различных областях MVC для этого я использовал следующий способ

если ваша структура проекта должна быть как следующий

>ProjectName 
    >Areas 
     >AreaGeneral >controllername >GetData(function) 
     >AreaA 
     >AreaB 
     >AreaC 

если ваши услуги, как

app.service("yourService", ["$http",function ($http) { 
    this.GetData= function() {  
    var c = $http({ 
     method: "post", 
     url:"../AreaGeneral/controllername/GetData", 
     data: "{}", 
     dataType: "json" 
     }); 
    return c 
} }]) 

если вы используются внутри AreaGeneral, затем url "../AreaGeneral/controllername/GetData" ОК для этого

, но при использовании другой области, как AreaA

"../AreaGeneral/controllername/GetData" поисках внутри AreaA, так что вы выигрыш получить результат

Solution для меня работа нравится называемая функция добавления дополнительных ../ согласно структуре каталогов корневой этот путь

"../../../AreaGeneral/controllername/GetData"

затем каждый раз при вызове getdata функция проверяет его из корневого каталога таким образом вы можете использовать функцию Getdata в любой области

Надейтесь, что это вам поможет.

+0

Хорошо. но как насчет представления GetData, нужно ли мне копировать один и тот же вид в каждой области, где я хочу использовать ту же функциональность. Мое намерение состоит в том, что я хочу использовать тот же вид и тот же контроллер в разных областях без повторной записи дублирующего кода, возможно ли это. – Khan

+0

Может кто-нибудь, пожалуйста, сообщите мне, как я могу использовать тот же контроллер с его представлениями внутри другой области без повторной записи представления и контроллера. – Khan

+0

использовать ng-include для доступа из разных областей – Pravin

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