0

MVC2プロジェクト用にnuget経由でMVCSiteMapProviderをインストールしましたが、ブレッドクラムの表示を微調整するのに問題があります。基本的に、ヘルパーファイルに加えた変更はブラウザに反映されません。すべてをコメントアウトすることもできますが、デフォルトのマークアップを使用するだけで、ページ上で正しくレンダリングされます。

ブレッドクラムメニューのスタイルを設定するために、Htmlにいくつかのクラスを追加したいと思います。プロジェクト全体でレンダリングされたマークアップのフラグメントを検索しようとしましたが、結果が返されなかったため、Htmlを構築するコードがDLLにロックされていると思いました。誰かが私が間違っていることを知っていますか?または、どのように私が望むものを達成することができますか?

前もって感謝します!

必要な(無視されている)マークアップは、SiteMapPathHelperModel.ascxファイルにあります。

<% foreach (var node in Model)
{ %>
    <div class="node-left"></div>
    <div class="node-label">
        <%=Html.DisplayFor(m => node)%>
    </div>
    <div class="node-right"></div>

<% if (node != Model.Last())
   { %>
        &gt;
<% } %>

私はブレッドクラムを使用して構築します

<div id="breadCrumb">
   <%= Html.MvcSiteMap().SiteMapPath() %>
</div>
4

1 に答える 1

1

これは少し遅れていますが、最近、MVC2 を使用し、Razor を使用せずにこれを行いました。Views/Shared/ に「DisplayTemplates」という新しいフォルダーを作成し、そのフォルダーに「SiteMapPathHelperModel」という新しい .ascx ファイルを作成しました...

ascx ファイルには、次のコードが含まれています。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcSiteMapProvider.Web.Html.Models.SiteMapPathHelperModel>" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<ul id="crumbs">    
    <% foreach (var node in Model.Nodes) { %>
        <% if (!node.IsClickable)
           { %>
           <li><span class="noclick"><%=Html.DisplayFor(m => node)%></span>
        <%}
           else
           { %>
            <li><%=Html.DisplayFor(m => node)%>
        <%} %>
        <% if (node.Children.Any())
            { %>
           <%=Html.DisplayFor(m => node.Children)%>
        <% } %>
        </li>
    <% } %>
</ul>

次に、ビューで正しく呼び出すだけです。このために私はしました:

<div id="breadcrumbs">        
        <%= Html.MvcSiteMap().SiteMapPath() %>            
</div>

そして、すべてがうまくいきました。使用したい CSS が適切に機能するように、特定のマークアップが必要でした。

于 2012-08-09T16:57:26.587 に答える