2009-05-19 10 views
13

私はPhil Haack Areas(1)のアイデアとSteve Sandersonの微調整(2)を使いたい新しいプロジェクトに取り組んでいます。私は、領域(Foo)を表示するためのアクションリンクを持つ単純なルートビューを持っています。生成されるURLには適切な領域がありますが、最後にルートコントローラ(Bar)が追加されます。ここに私のルートビューのコードは次のとおりです。ASP MVCエリアとアクションリンク

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>Index</h2> 

<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" })%> 

</asp:Content> 

、ここでは、それが生成するURLは次のとおりです。

はlocalhost:6494 /フー/バー

"/バー" が上である理由を任意のアイデアは?

(1):haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

(2):blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/

答えて

20

私は解決策を見つけました。私はそれが適切だとは思わないので、私は改善を求めるでしょう。コントローラ名を指定することで、適切にフォームURLを取得できます。 I.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>Index</h2> 

<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo", controller="Baz" })%> 

</asp:Content> 

私はこれをしなかったら、そのURLが正しい

はlocalhost:6494/Fooの

なぜこれが問題でしょうか? Philのデモでは、HomeControllerという名前のコントローラを使用しています。 Html.ActionLink()メソッドがどのようにURLを構築するのかについてはわかりません(トレースできないため)。それは私が持っていないHomeControllerの既定のケースに頼っているかのように見えます。

ホームに名前が付けられていないコントローラをデフォルトにする方法の提案がある場合は、返信してください。ありがとう

2

Homeをデフォルトコントローラー名にしない場合は、単にchange the default routeとしてください。

0

@Joe

あなたApp_Start/RouteConfig.csはあなたが好きなようにホームからデフォルトのコントローラの値を変更する必要がファイルに:

routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" } // Parameter defaults 
     ); 
関連する問題