在MVCSiteMapProvider 2.3.1中编辑Breadcrum Html

时间:2012-05-23 09:27:25

标签: asp.net-mvc-2 mvcsitemapprovider

我已经通过nuget为我的MVC2项目安装了MVCSiteMapProvider,但是我在修改面包屑的显示时遇到了麻烦。基本上我对帮助文件所做的任何更改都没有反映在浏览器中,我甚至可以对整个事情进行评论,但它仍然可以在页面上正确呈现,只需使用默认标记。

我想在Html中添加几个类来帮助我设置breadcrumb菜单的样式。我已经尝试在整个项目中搜索渲染标记的片段但是没有返回任何结果,这使我认为构建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>

1 个答案:

答案 0 :(得分:1)

这有点晚了,但我最近做了这个,也使用了MVC2而没有使用Razor。我在Views / Shared /中创建了一个新文件夹&#34; DisplayTemplates&#34;,并在该文件夹中创建了一个名为&#34; SiteMapPathHelperModel&#34; ...

的新.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可以正常工作。