2013-07-18 12 views
14

副題として、ambiguous controller namesの問題全体を理解していて、ルート設定に名前空間を使用しているため、ここで問題にはならないと思います。エリア内のルート名にUrl.RouteUrl()を使用する

は、これまでのところ、私は私のプロジェクト・レベルのコントローラを持っているし、次の登録とユーザーエリア:

public class UserAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "User"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "UserHome", 
      "User/{id}", 
      new { action = "Index", controller = "Home", id = 0 }, 
      new { controller = @"Home", id = @"\d+" } 
     ); 

     context.MapRoute(
      "UserDefault", 
      "User/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

「USERHOME」ルートがあるので、私はルートにクリーナーIMOに見える/User/5/User/Home/Index/5を許可することができます。

Url.RouteUrl("UserHome", new { id = 5 })を理想的に使用したいと思いますが、これは常に空白に戻ったり、ルート名が見つからないという例外が表示されます。これは明らかです。

ただし、Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 })を使用しても問題ありません。

なぜ、ルートマッピングにデフォルトが設定されている場合、アクションとコントローラを指定する必要がありますか?私は何が欠けていますか?

+0

名前空間を追加してみてください。 – Oasis

答えて

2

私は、この動作は固定されており、今使用して、この同じ正確なコードであるとして働いてきたことを、最低で.NET 4.5.1および5.2.2 MVCでそれを確認することができますUrl.RouteUrl("UserHome", new { id = 5 })

これは私のポストの時点から修正されているバグだったようです。

TSmithのソリューションは機能しますが、修正があるので、余分な作業を行う必要はありません。

+1

私のmvc 5.2.3 [ルート( "ユーザー/ {id}"、名前= "UserHome")の属性ルーティングで動作していないようです]] –

6

ホットフィックスが存在するかどうかはわかりませんが、現在の動作は少し異なります。 あなたの正確なコードを使用するとしよう:

Url.RouteUrl("UserHome", new { id = 5 }) 

私は今取得:

/User/5?httproute=True 

をこれでも厄介に見えるので、私は、ルートで実験し、別のデフォルトのparamを追加しました:

context.MapRoute(
      "UserHome", 
      "User/{id}", 
      new { action = "Index", controller = "Home", area = "User", id = 0, 
         httproute = true }, 
      new { controller = @"Home", id = @"\d+" } 
     ); 

今使用しているとき

Url.RouteUrl("UserHome", new { id = 5 }) 

私は

/User/5 

免責事項の素敵なURLを取得ルート宣言のhttproute=trueの望ましくない副作用があるかもしれません。また

、より詳細な使用:

@Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 }) 

はまだのようにうまく動作します。

2

はこれを試してみてください:

@Url.Action("Index", "Home", new { Area = "User" }) 
+0

偉大な答え:) –

関連する問題