ASP.NET MVC 3 RAZOR リクエストURLによってCSS指定
2012/03/28
「/Controllers/」内で関数とか作ってやれば良いんだけど、そんな大仰なものでもないので別案。
レイアウトページでラムダ式とかいうヤツを使う。
レイアウトページでラムダ式とかいうヤツを使う。
さんぷる
やりたいことは下記のような内容。
各ページに存在するメニュー。
表示されているページと同じメニュー項目を別CSSにしたい。
表示されているページと同じメニュー項目を別CSSにしたい。
たとえば、メニュー項目に「top」「about」があるとする。
「top」が表示されてるときはメニュー項目「top」を別CSS、「about」が表示されてるときはメニュー項目「about」を別CSSにしたい。
デリゲートとかラムダ式とか言われているみたいけどよくは分からない。とりあえず下記のような感じ。
レイアウトページ
- @{
- Func<string, string> BoldLink = (action) =>
- {
- var requestAction = this.ViewContext.Controller.ControllerContext.RouteData.Values["action"] as string;
- string myStyleBold = "";
- if (action == requestAction)
- {
- myStyleBold = "font-weight:bold;";
- }
- return myStyleBold;
- };
- }
- <a href="@Href("/Home/Index/")" style="@BoldLink("Index")">Index</a>
- <a href="@Href("/Home/About/")" style="@BoldLink("About")">About</a>
- <a href="@Href("/Home/Other/")" style="@BoldLink("Other")">other</a>
※リクエストURLが「/Home/Index/」だったら4行目で「requestAction」に「Index」が代入される。
※4行目の「Values["action"]」の「action」を「controller」にすればリクエストURL(/Home/Index/)の「Home」が取得できる。
めも
「Func<string, string>]」は最初の「string」は返り値の型。二つ目の「string」は引数の型。引数が2つ以上あるならカンマ区切りで増やしていく。
「BoldLink」は関数名。
「(action)」は引数。
他の「=」や「=>」とかはそういうモノ。意味はあるかもしれないけど、知らない。
「BoldLink」は関数名。
「(action)」は引数。
他の「=」や「=>」とかはそういうモノ。意味はあるかもしれないけど、知らない。