かにすることができましSiteMapPathルートノードをホームページに表示すべき事は何か?
-
20-08-2019 - |
質問
たいのですが非表示のルートノードにSiteMapPath制御の場合、ユーザのルートノードのページに表示すべき事は何か?例えば、私のパンくずトレイル子どものページ:
ホーム>製品情報>ハンマー>ボールPeen
である。ができた場合には、ユーザのホームページのSiteMapPath制御を表示
ホーム
が無駄な雑誌の種類も数千にのぼります。おさえたい表示するホームのルートノードのユーザのホームページです。私のSiteMapPath制御マスター。また、私は取り扱いSiteMapResolveのquerystringsのノード。
解決 3
私はこれを理解するために管理が、私は持っていた問題は、やや微妙だったので、それはしばらく時間がかかりました。 Schouの-乗っは正しい考えを持っており、それは私が成功せずにPage_Load
やっていたものです。私はSiteMapResolve
内のノードをクローニングし、クローンを返していましたので、それが働いていなかった理由があります。 SiteMap.CurrentNode
はとてもSiteMap.RootNode
クローンとの比較が失敗した<=>ために参照する前にこれが発生します。
ここでは、完全なソリューションです。
protected void Page_Load(object sender, EventArgs e)
{
SiteMapPath1.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
}
private SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
{
if (SiteMap.CurrentNode == null || SiteMap.CurrentNode == SiteMap.RootNode)
{
return SiteMap.CurrentNode;
}
// clone and set querystring in other nodes...
}
他のヒント
ついでに表示する項目を選択 SiteMapPath
制御のホームページ:
mySiteMapPath.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
私はいくつかのコードベースの例を見てきましたが、ここでは、ルートノードと、次のパス区切りを非表示になります安価CSSのソリューションは、(ターゲットのブラウザはいえ、CSS 2.1をサポートしている必要があります)です。
そうよう空にRootNodeTemplateを設定することにより、ルートノードを殺す
<asp:SiteMapPath ID="SiteMapPath1" runat="server" CssClass="breadCrumbTrail">
<RootNodeTemplate></RootNodeTemplate>
</asp:SiteMapPath>
つまり、ルートノードには何もレンダリングしないようになりますが、ルートのパス区切りはまだ表示されますので、あなたのスタイルシートにこれらのCSSセレクタを追加します(重要:私は私のSiteMapPath1要素与えた「breadCrumbTrail」という名前のCssClass注意します):
.breadCrumbTrail
{
font-size: small;
}
/*
First child element rendered by a SiteMapPath is an <a> tag you have no control over,
adjacent to that is your root node's span tag, adjacent to that is the root node's
path-separator span: don't display it.
*/
.breadCrumbTrail > a:first-child + span + span
{
display: none;
}
のSiteMapDataSourceのShowStartingNode施設もあります。ルートノードを非表示にするにはfalseに設定します。
ホームページで、「頭」の部分には、以下のスクリプトを追加します:
protected void Page_Load(object sender, EventArgs e)
{
SiteMapPath sp = (SiteMapPath)Master.FindControl("SiteMapPath1");
sp.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
}
上記の方法を適用するために、SiteMapPath1
マスターページ上に配置する必要があります。
の一つの方法、上達するためのコツなどを隠すSiteMapPathルート注3つの簡単な手順:
参考MasterPageからContentPage
例:
<%@ MasterType VirtualPath="~/Master.master" %>
作SiteMapPathとして保護され内部のスタイルの傾向に続くデザインクラス
例:
protected internal global::System.Web.UI.WebControls.SiteMapPath SiteMapPath1;
隠れからContentPage
例:
Master.SiteMapPath1.Visible = (SiteMap.CurrentNode != SiteMap.RootNode);
私は私がコントロールのレンダリングブロックの周りに(以前に示唆したロジックで)Ifステートメントをラップし、毎日それを呼び出すことでしたが、私の_Layout.cshtmlに差し込むと、最も簡単な解決策を発見しました
@if (SiteMap.CurrentNode != SiteMap.RootNode)
{
@Html.MvcSiteMap().SiteMapPath()
}
<asp:SiteMapPath ID="contentNavigation" runat="server">
<RootNodeTemplate>
</RootNodeTemplate>
</asp:SiteMapPath>
とCSSコード:
#ctl00_contentNavigation span:nth-child(2),span:nth-child(3)
{
display:none;
}
私は最近、同様の問題があったが、私は私の溶液中でのメニューのためにXmlDataSourceを使用しています。
ソースXMLのサンプル構造ます:
<root>
<Menu text="" url=""/>
<Menu text="" url=""/>
</root>
あなたは「ルート」メニュー項目を表示しないようにしたい場合は、値にXmlDataSourceに簡単なセットのXPathプロパティに持っている「/ルート/ *」
ParentLevelsDisplayed=0 助
<asp:SiteMapPath ID="SiteMapPath1" runat="server" PathSeparator=""
ParentLevelsDisplayed="0" >
<RootNodeTemplate></RootNodeTemplate>
</asp:SiteMapPath>