かにすることができましSiteMapPathルートノードをホームページに表示すべき事は何か?

StackOverflow https://stackoverflow.com/questions/1050610

  •  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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top