ASP.NET MVC学習のルーティン編(3)

21659 ワード

原文:
ASP.NET MVC学習のルーティン編(3)
ASP.NET MVC学習のルーティン編(2)に続いて勉強を続けます.
11.ルーティングによるリンクの出力
ウェブサイトの開発にはリンクが欠かせない以上、強力なルーティングを学びましたが、これらのルーティングのパスをページに出力するステップが欠けています.次に、ルーティングの出力方法を学び始めます.
まず、ルーティング登録セクションを以下に示します.
 1 namespace MvcStudy

 2 {

 3     public class RouteConfig

 4     {

 5         public static void RegisterRoutes(RouteCollection routes)

 6         {

 7             routes.Add(new Route("MyTest",new DonwloadHandler()));

 8 

 9             routes.MapRoute(

10                 name: "Default2",

11                 url: "{controller}/{action}/{id}",

12                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

13             );

14         }

15     }

16 }

 
次はViewsHomeIndexでcshtmlの出力パス(対応するコントローラまたはページがない場合は、自分で新規作成してください):
1 @Html.ActionLink("Index", "Index")

2 @Html.ActionLink("List","List")

このメソッドの1つ目はリンクの名前で、2つ目はメソッドの名前です.
 
最終的には、生成されたページに次のコードが表示されます.
1 <a href="/">Index</a>

2 <a href="/Home/List">List</a>

現在のページはViews/Home/Indexなので、最初に直接出力するのは「/」で、次は2番目のパスで、デフォルトは現在のコントローラなので最後に構成されるパスは「/Home/List」です.
もちろん、次のコードなど、コントローラを手動で指定することもできます.
 
1 @Html.ActionLink("Index", "Index","User")

2 @Html.ActionLink("List","List","User")

ここでは3番目のパラメータを使用して、コントローラを指定します.
注意:ActionLinkメソッドが入力したメソッド名とコントローラ名は、現在このコントローラが存在するかどうか、またはこのメソッドが存在するかどうかは関係ありません.同様にルーティングの経路に従って出力されます.
 
上記のルーティングを見ると、idというオプションパラメータもあります.もちろん、ActionLinkを使用してこのパラメータを転送する方法を知りたいと思います.次に、コードを次のように書き換えます.
1 @Html.ActionLink("Index", "Index", "User", new { id = "123" }, null)

2 @Html.ActionLink("List", "List", new { id = "123" })

 
ここのブロガーの変なところはASPです.NET MVC 3の最初の書き方は@Htmlでよい.ActionLink("Index", "Index", "User", new { id = "123"})
しかし、私がプレゼンテーションするときはMVC 4を使っていますが、nullパラメータを後ろに付けなければなりません.そうしないと、最終的に出力されるパスの後ろにこのようなクエリー文字列(?Length=4)があります.
ルーティングパラメータとして使用します.
 
最終的に生成されたコードの表示を続行します.
1 <a href="/User/Index/123">Index</a>

2 <a href="/Home/List/123">List</a>

 
もちろん、ルーティングにあるパラメータを渡す必要はありません.このように、次のような他のパラメータを渡すことができます.
1 @Html.ActionLink("Index", "Index", "User", new { id = "123" , fid = "123", sid = "123"},null)

2 @Html.ActionLink("List", "List", new { id = "123" ,tid = "asd",asf= "1"})

 
最終的な結果は次のとおりです.
1 <a href="/User/Index/123?fid=123&amp;sid=123">Index</a>

2 <a href="/Home/List/123?tid=asd&amp;asf=1">List</a>

 
ここで発見&符号化された、ここの&そうです.ルーティングに存在しないパラメータがクエリ文字列で伝達されていることも分かる.皆さんは
コントローラのメソッドにナビゲートできるので、ここで終わります.先見のある人はきっとASPを知っていると信じています.NET MVCにはエリアという技術も存在しますが、
では、領域内のコントローラの方法をどのように位置づけるかという問題が発生しました.
 
ここではadminの領域を新規作成し、再コンパイルし(再コンパイルしないと最後に得られたパスで領域をクエリー文字列として)、コードを次のように書き換えます.
1 @Html.ActionLink("Index", "Index", new { area = "admin", controller = "Admin" })

2 @Html.ActionLink("List", "List", new { id = "123" ,tid = "asd",asf= "1"})

 
ページをリフレッシュし、ページのソースコードを表示します.
1 <a href="/admin/Admin">Index</a>

2 <a href="/Home/List/123?tid=asd&amp;asf=1">List</a>

 
ここで疑問に思うかもしれませんが、なぜここから出力されるパスは/admin/Adminで、actionパラメータを指定しているのに、/admin/Admin/Indexであるべきなのか、このとき
Areas/admin/adminAreaRegistrationを開くことができます.csファイルは、次のとおりです.
 1 namespace MvcStudy.Areas.admin

 2 {

 3     public class adminAreaRegistration : AreaRegistration

 4     {

 5         public override string AreaName

 6         {

 7             get

 8             {

 9                 return "admin";

10             }

11         }

12 

13         public override void RegisterArea(AreaRegistrationContext context)

14         {

15             context.MapRoute(

16                 "admin_default",

17                 "admin/{controller}/{action}/{id}",

18                 new { action = "Index", id = UrlParameter.Optional }

19             );

20         }

21     }

22 }

 
new{action="Index",id=UrlParameter.Optional}がよく見えます.ルートを登録するときにactionのデフォルトが指定されているので、肝心なのはここです.
値はIndexなので、上からパスを出力するときに領域とコントローラだけを出力しても仕方がありません.
 
上はリンクを簡単に出力しただけですが、今では多くのサイトがスタイルなどを採用しています.では、このリンクにスタイルを追加するにはどうすればいいのでしょうか.
次に、リンクにclassスタイルを簡単に追加します.
1 @Html.ActionLink("Index", "Index", new { area = "admin", controller = "Admin" }, new {@class = "cust",id = "123" })

2 @Html.ActionLink("List", "List", new { id = "123" ,tid = "asd",asf= "1"})

 
ここでclassを指定するときはclassを直接書いていません.classはC#でキーワードなので、@を追加する必要があります.
最終的な結果は次のとおりです.
1 <a class="cust" href="/admin/Admin" id="123">Index</a>

2 <a href="/Home/List/123?tid=asd&amp;asf=1">List</a>

 
classスタイルとidを指定しました.もちろん、他のパラメータを指定することもできます.最後にもう一つの方法を紹介します:@Html.RouteLinkは、より柔軟に、
パラメータはすべて匿名の方法を採用しているので、次のようにします.
1 @Html.RouteLink("Route", new { controller = "Home", action = "Index", id = "123", sid = "asd" })

最終的な結果は次のとおりです.
1 <a href="/Home/Index/123?sid=asd">Route</a>

 
 
aラベルではなくリンクされたテキストを簡単に出力したい場合は、次の方法を使用します.
@Url.Action
@Url.RouteUrl
コードでは次のことができます.
Url.Action
Url.RouteUrl
 
ここで私たちのルート部分はすべて終わりました.もちろん、お客様がルートの原理を解析する必要がある場合は、伝言を残してください.