1本asp.Netmvcナビゲーションバーおよびハイライト実装構想
15385 ワード
1.ナビゲーション領域は、マスターページまたはユーザーコントロールエージェントを介しています.
このセクションでは、バックグラウンドで提供されるディレクトリ情報を読み込み、controller、action、className、その他のプロパティを含むリンクを動的に生成します.大まかなクラスは、public class NavigationEntity{public string ControllerName{get;set;} public string ActionName { get; set; } public string Name { get; set; } public string ClassName { get; set; }}viewのコードは、<%foreach(navigation.Helper.NavigationEntity in(ViewData["navigation"]as IList){%><%:Html.ActionLink(entity.Name,entity.ActionName,entity.ControllerName,new{@class=entity.ClassName})%> <%} %>
2.カスタムActionFilterAttributeを使用してナビゲーション情報を提供します.
利点は、1、各リンクはactionに対応し、ここでは実際のcontroller、action名にアクセスできることです.ViewDataにデータを投げることができます.2.各カスタムActionFilterAttributeは、使用可能なコントローラ、actionを含むことを決定できる独自のナビゲーション情報セットを有することができる.モジュールや機能ブロックが独自のナビゲーションメニューを管理することで、制御が容易になります.3,FilterAttributeの利便性を利用しました.ActionFilterAttributeの4つの切り込みタイミングは、OnResultExecutedを除く3つのうちいずれかを任意に選択します.
3,actionで使う
この例はvs 2010から自動的に生成するaspを書き換える.Netmvc 2.0プログラム.cssファイルはul liと書かれているので調整する必要があります.aのいろいろなスタイル.変更しないで、効果は明らかではありません.
このセクションでは、バックグラウンドで提供されるディレクトリ情報を読み込み、controller、action、className、その他のプロパティを含むリンクを動的に生成します.大まかなクラスは、public class NavigationEntity{public string ControllerName{get;set;} public string ActionName { get; set; } public string Name { get; set; } public string ClassName { get; set; }}viewのコードは、
2.カスタムActionFilterAttributeを使用してナビゲーション情報を提供します.
利点は、1、各リンクはactionに対応し、ここでは実際のcontroller、action名にアクセスできることです.ViewDataにデータを投げることができます.2.各カスタムActionFilterAttributeは、使用可能なコントローラ、actionを含むことを決定できる独自のナビゲーション情報セットを有することができる.モジュールや機能ブロックが独自のナビゲーションメニューを管理することで、制御が容易になります.3,FilterAttributeの利便性を利用しました.ActionFilterAttributeの4つの切り込みタイミングは、OnResultExecutedを除く3つのうちいずれかを任意に選択します.
public
class
NavigationAttibute : ActionFilterAttribute
{
private
IList
<
NavigationEntity
>
_navigationColletion;
private
const
string
_selectedClassName
=
"
higthLight
"
;
private
const
string
_unSelectedClassName
=
"
unLight
"
;
public
NavigationAttibute()
{
_navigationColletion
=
new
List
<
NavigationEntity
>
();
_navigationColletion.Add(
new
NavigationEntity()
{
ControllerName
=
"
Home
"
,
ActionName
=
"
Index
"
,
ClassName
=
_unSelectedClassName,
Name
=
"
"
});
_navigationColletion.Add(
new
NavigationEntity()
{
ControllerName
=
"
Home
"
,
ActionName
=
"
About
"
,
ClassName
=
_unSelectedClassName,
Name
=
"
"
});
}
public
override
void
OnResultExecuting(ResultExecutingContext filterContext)
{
base
.OnResultExecuting(filterContext);
string
controller
=
filterContext.RouteData.Values[
"
controller
"
]
as
string
;
string
action
=
filterContext.RouteData.Values[
"
action
"
]
as
string
;
foreach
(NavigationEntity entity
in
_navigationColletion)
{
if
(entity.ControllerName
==
controller
&&
entity.ActionName
==
action)
{
entity.ClassName
=
_selectedClassName;
}
else
{
entity.ClassName
=
_unSelectedClassName;
}
}
filterContext.Controller.ViewData[
"
navigation
"
]
=
_navigationColletion;
}
}
3,actionで使う
public
class
HomeController : Controller
{
[NavigationAttibute]
public
ActionResult Index()
{
ViewData[
"
Message
"
]
=
"
ASP.NET MVC!
"
;
ViewData[
"
Position
"
]
=
RouteData.Values[
"
controller
"
]
+
"
_
"
+
RouteData.Values[
"
action
"
];
//
, NavigationAttibute
IList
<
NavigationEntity
>
list
=
ViewData[
"
navigation
"
]
as
IList
<
NavigationEntity
>
;
return
View();
}
[NavigationAttibute]
public
ActionResult About()
{
ViewData[
"
Position
"
]
=
RouteData.Values[
"
controller
"
]
+
"
_
"
+
RouteData.Values[
"
action
"
];
//
, NavigationAttibute
IList
<
NavigationEntity
>
list
=
ViewData[
"
navigation
"
]
as
IList
<
NavigationEntity
>
;
return
View();
}
}
この例はvs 2010から自動的に生成するaspを書き換える.Netmvc 2.0プログラム.cssファイルはul liと書かれているので調整する必要があります.aのいろいろなスタイル.変更しないで、効果は明らかではありません.