4

まず、nop/mvcの新機能です。この一見簡単な作業には何の解決策も見つけられません。Asp.Net MVC 3 - 既にエリアに属している別のルートをマップする

私は作成しているプラ​​グインのカスタムルートを定義していますが、これまではうまくいっています。私が定義したどのルートも問題なく働いています(例: "/ Dealerlocator"と "Dealer/List"のルートを設定しました)

問題は、 '/ Admin' 「管理者/ディーラー」のようなカスタムルートを設定しようとすると、自分のルートがエリアではなくカスタムルートで解決されていると言うことができます。

私は "Admin/Dealer"に行ってみたいと思っていますが、それは無視されます。この1つの領域に設定されたルートが原因で、RouteProviderクラスで定義したルートを使用します。

DataTokensを使用してこの問題を解決することを推奨しました。しかし、私はそれらを働かせることはできません。

私のプラグインのルーティングコード:

public partial class RouteProvider : IRouteProvider 
{ 
    public void RegisterRoutes(RouteCollection routes) 
    { 
     var route = routes.MapRoute(
      "Nop.Plugin.Misc.DealersAdmin", 
      "Admin/Dealer", 
      new { controller = "DealerAdmin", action = "Index" }, 
      new[] { "Nop.Plugin.Misc.Dealers.Controllers" } 
     ); 

     route.DataTokens.Add("Area", "Admin"); 
    } 
} 

Nopcommerceの管理エリアルーティング:

public class AdminAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Admin"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", area = "Admin", id = "" }, 
      new[] { "Nop.Admin.Controllers" } 
     ); 
    } 
} 

は、私は、コントローラは「ディーラー」と命名されている場合と一致しないようにエリア登録に条件を設定しようとしましたそれはうまくいくようです。しかし、AdminAreaRegistrationクラスはコアのnopフレームワークの一部として変更することはできません。私はすべての作業をRouteProviderクラスで行ってみたいと思います。多分私のルートの優先順位を高く設定して最初に解決される方法がありますか?ありがとう。

+0

(「Admin/Plugin/Dealer/Admin/List」のように)その部分が領域ルートによって照合されないようにします。これはこれを行うための許容される方法のように見えますか? – Tomas

答えて

2

私はまた、この問題を巡って、しばらく前に、ルート優先度と関係があるとしています。 This post helped me alot

あなたのコメントについて - あなたがそうすることができなかった理由はありませんが、代わりにあなたのルートをより明確に定義することができます。

context.MapRoute(
    "DealerAdminDefault", 
    "Dealer/Admin/{action}/{id}", 
    new { controller = "DealerAdmin", action = "Index", id = UrlParameters.Optional } 
); 

私は、私は、少なくとも5を持っているものに、「管理者/ディーラー」から使用されるルートを変更することで、私が欲しかったものを達成するための方法を見つけたと思う希望このことができ、

マット

+0

ルート優先度に関する投稿をありがとう。コアnopファイルを変更できないというのはちょっと難しいことでした。あなたの提案されたルートに関して、私は同様のアプローチ(管理者を最初に置いていない)を試してみたのですが、5パートの方法を使用してしまったのは、始めに管理者を持たない人が他の合併症を引き起こしたためです。ノップフォーラムでも、管理者から始まる5つの部分からなるURLを使用することは、現在受け入れられている解決策であるようです。 – Tomas

+0

@Tomasどのように解決しましたか?私はまったく同じ問題を抱えていますが、プラグインのために既にnopcommerceによって取られているURLを使用したいのですが、コアを変更したくありません。 – JSBach

+0

問題は2通りの方法で解決できます。 1つは、nopcommerce管理ルートと競合しないように、5つの部分のURL(「Admin/Plugin/Dealer/Admin/List」など)を使用しています。または、マットが指摘したように、URLを変更してAdminで始まらないようにします(Dealer/Admin/{action}/{id}など)。私は個人的に5つの部分のURLに行きました。 – Tomas

関連する問題