C# 如何控制Orchard中菜单的渲染

C# 如何控制Orchard中菜单的渲染,c#,asp.net-mvc,orchardcms,orchardcms-1.6,C#,Asp.net Mvc,Orchardcms,Orchardcms 1.6,我有以下问题:我正在果园做一个网站,必须应用一些设计公司的设计。他们提供了html和CSS(+更少),我必须把它变成一个主题。 除了菜单外,我大部分时间都做得很好。我想在下面的代码中将一个类应用于nav标记,但我无法对它进行任何替换 <article class="widget-navigation widget-menu-widget widget" shape-id="18"> <nav shape-id="19"> <ul class="menu me

我有以下问题:我正在果园做一个网站,必须应用一些设计公司的设计。他们提供了html和CSS(+更少),我必须把它变成一个主题。 除了菜单外,我大部分时间都做得很好。我想在下面的代码中将一个类应用于nav标记,但我无法对它进行任何替换

<article class="widget-navigation widget-menu-widget widget" shape-id="18">
<nav shape-id="19">
    <ul class="menu menu-main-menu" shape-id="19">
<li class="current first" shape-id="22">
    <a href="/" shape-id="22">Home</a> 
</li>
<li shape-id="24">
<a href="/Something1" shape-id="24">Something1</a>
</li>
<li shape-id="26">
<a href="/Something2" shape-id="26">Something2</a>
</li>
<li class="last" shape-id="28">
<a href="/Something3" shape-id="28">Something3</a>
</li>
    </ul>
</nav>
</article>

我认为您可以为菜单创建一个自定义形状,如上所述,即inside Views/menu-Main.cshtml。从那时起,你几乎可以做任何你想做的形状。比如说

@{
// Model is Model.Menu from the layout (Layout.Menu)
    var tag = Tag(Model, "ul");

    var items = (IList<dynamic>)Enumerable.Cast<dynamic>(Model.Items);

    if (items.Any()) {
        items[0].Classes.Add("first");
        items[items.Count - 1].Classes.Add("last");
    }    
}
<nav class='my-custom-class'>
    @tag.StartElement
        @DisplayChildren(Model)
    @tag.EndElement
</nav>
@{
//模型是布局(layout.Menu)中的Model.Menu
var标签=标签(型号,“ul”);
var items=(IList)Enumerable.Cast(Model.items);
if(items.Any()){
项[0]。类。添加(“第一”);
items[items.Count-1].Classes.Add(“last”);
}    
}
@星电信
@显示子对象(模型)
@tag.EndElement
我还没有试过,所以如果我不是100%正确的话,我会道歉,但这至少会让你走上正确的方向


此外,上面的示例代码只是原始菜单代码的一个稍微修改版本,Orchard最好的部分是它是开源的。。。您可以查看原始代码

我将尝试一下。我正在使用Orchard btw的源代码版本,但是我想避免出于可维护性原因修改除我自己模块以外的其他模块。我给你的答案不需要修改原始源代码,我只是引用了它,以防你需要知道从何处开始。你是对的,您不应该修改现有模块。相反,将文件复制到您的主题中并修改它。嗯,我正在查看导航模块中的视图,它们中似乎没有一个对
标记负责。这句话的意思是什么?对于在我之后来到这里的人们来说:让我明白了上面的答案。
@Display(Model.Menu)
@{
// Model is Model.Menu from the layout (Layout.Menu)
    var tag = Tag(Model, "ul");

    var items = (IList<dynamic>)Enumerable.Cast<dynamic>(Model.Items);

    if (items.Any()) {
        items[0].Classes.Add("first");
        items[items.Count - 1].Classes.Add("last");
    }    
}
<nav class='my-custom-class'>
    @tag.StartElement
        @DisplayChildren(Model)
    @tag.EndElement
</nav>