■77455 / inTopicNo.5) |
Re[3]: ASP.NET SiteMapPathコントロールについて |
□投稿者/ WebSurfer (679回)-(2015/10/21(Wed) 16:17:27)
|
■No77454 (Ante さん) に返信
DataTable に web.sitemap の情報を取得してそれから LinkButton を使った
自作 SiteMapPath を Panel 内に作成しているようですが、web.sitemap を作
っているなら SiteMap オブジェクトから情報を取得したほうが良いと思います。
SiteMap クラス
https://msdn.microsoft.com/ja-jp/library/system.web.sitemap(v=vs.100).aspx
SiteMap オブジェクトは ASP.NET によって自動的に生成されるサイトのナビゲ
ーション構造のインメモリ表現で、単純に SiteMap として参照が取得できます。
それを使って、質問者さんが行ったように Panel に LinkButton を利用した
自作 SiteMapPath を作ると以下のような感じになります。ご参考まで。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
List<SiteMapNode> nodeList = new List<SiteMapNode>();
CreateNodeList(SiteMap.CurrentNode, nodeList);
for (int i = nodeList.Count - 1; i >= 0; i--)
{
if (i == 0)
{
Literal literal = new Literal();
literal.Text = nodeList[i].Title;
Panel1.Controls.Add(literal);
}
else
{
LinkButton button = new LinkButton();
button.Text = nodeList[i].Title;
button.ToolTip = nodeList[i].Description;
button.CommandName = "navigate";
button.CommandArgument = nodeList[i].Url;
button.Click += new EventHandler(button_Click);
Panel1.Controls.Add(button);
Literal literal = new Literal();
literal.Text = " > ";
Panel1.Controls.Add(literal);
}
}
}
// CurrentNode から RootNode までたどって List<SiteMapNode> を作る。
// web.sitemap に url は設定済み、かつ一意の条件。
protected void CreateNodeList(SiteMapNode node, List<SiteMapNode> nodeList)
{
nodeList.Add(node);
if (node.Url == SiteMap.RootNode.Url)
{
return;
}
else
{
CreateNodeList(node.ParentNode, nodeList);
}
}
protected void button_Click(object sender, EventArgs e)
{
if (((LinkButton)sender).CommandName == "navigate")
{
// ここでセッションをクリア
Response.Redirect(((LinkButton)sender).CommandArgument);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<h3>標準コントロールの SiteMapPath</h3>
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
</asp:SiteMapPath>
<hr />
<h3>LinkButton で自作した SiteMapPath</h3>
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</form>
</body>
</html>
他のページにも使用するならユーザーコントロールにしたほうかいいかもしれま
せん。
|
解決済み
|