2012-01-19 19 views
2

I次のルートがあります。これは、その経路のために呼ばれるべきコントローラであるルーティングMVCで働いていない

routes.MapRoute(
    "Property", 
    "{language}/property/{propertyUrlId}", 
    new { controller = "PropertyDetails", action = "Property" } 

public class PropertyDetailsController : Controller 
{ 
    public ActionResult Property(string language, string propertyUrlId) 
    { 

など

は、次のURLをそのルートを使用する必要があります:

http://domain.com/en-us/property/3 

代わりに、私は404を取得します。ここで


は私のルートです:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute(
     "Property", 
     "property/{propertyUrlId}", 
     //new { controller = "PropertyDetails", action = "Property" }, new { language = @"[a-zA-Z]{2}-[a-zA-Z]{2}" } 
     new { controller = "PropertyDetails", action = "Property" } 
    ); 
} 

はどちらか、言語を持つ、または言語/国では動作しませんでした。

+0

ルーティングルールの登録順序は重要です。登録順に作成しているすべてのルートをお知らせください。 – Novakov

+0

提案された変更の後でさえ、私はまだ404を手に入れています。 – birdus

+0

@AndrewBarberあなたのコメントは間違っています。別のルートと一致する場合は、404が表示されます。 mvc default route - > controller not known - > 404 – santiagoIT

答えて

0

まず、ルート内の2つのチャンクに離れて{言語}を破るする理由はありません。あなたのいくつかは述べたように、これは結構です:

routes.MapRoute(
    "Property", 
    "{language}/property/{propertyUrlId}", 
    new { controller = "PropertyDetails", action = "Property" } 

第二に、私はこの問題の解決に不可欠だったいくつかの情報を省略しました。私は問題の記述にこれを含めることは私には起こりませんでした。なぜなら私は関係がないことを知らなかったからです。 MVCプロジェクトは、Sitecore CMSをデータストアとして使用しているWebサイト(非MVC)も含むソリューションに含まれています。 SitecoreはURLの言語セグメントを取り除き、それ自体を格納していました。これが起こっていることを知り、問題に対処することができました。

私はすべての入力を感謝し、私は混乱のために謝罪します。

2

URLのセグメントとして「en-us」を使用すると完全に問題ありません。私は他のルートも登録していると思います。このルートを他のルートの上に移動し、少なくともデフォルトルートの上に移動してください。

私はシナリオをテストしましたが、それは私にとってはうまくいきます。

+0

私はen-usを2つのパラメータに分解する必要はないということですか?私の問題はどこかにあるようです。これは現在Global.asaxxの唯一のルートです。 – birdus

2

ほとんどの場合、プロパティルートの前にデフォルトルートが登録されています。デフォルトルートは、通常次のようになります。

このデフォルトルートの前にプロパティルートを登録するだけで正常に動作します。

なぜ失敗するのですか? EN-US

(あなたが実際に最初にデフォルトルートを登録していると仮定) - >コントローラとして解釈され

プロパティ - >アクションとして解釈され

あなたはエンusControllerとを持っていないので、プロパティアクション - > 404

+0

@AndrewBarber 100%確実です。ちょうどそれを試して;-) – santiagoIT

+0

私はやった。私は意図されたルートが最初でないときに404を得て、それが最初のときにはコントローラ・アクションと呼ばれます。 +1 –

+0

しかし、superwalnutへのコメントでは、質問に表示されているルートが*唯一のルートだと言っているので、デフォルトルートはそこにもありません(バーが正しい場合) –

0

あなたのようにURLの構造を持つようにしたいことを考慮:

http://domain.com/en-us/property/3 

たちEこのルーティング:

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

このコードブロックの上routintを置く:

routes.MapRoute(
      "Property", // Route name 
      "{language}/property/{propertyUrlId}", // URL with parameters 
      new { controller = "PropertyDetails", action = "Property", propertyUrlId = UrlParameter.Optional } // Parameter defaults 
     ); 

デフォルトのルーティングは次のように、あなたのGlobal.asaxファイルに存在する場合。

そして、あなたのコントローラのアクションは次のようになります。すべての

public ActionResult Property(int propertyUrlId) 
{ 
return View(); 
} 
関連する問題