如何从剃须刀视图呈现小部件

How to render widget from razor view

由于我的主题结构(可能是因为我对 Orchard 还很陌生),我需要从剃刀视图中呈现一个小部件。该小部件包含一个二级菜单,我需要将其放在 Layout.cshtml;类似这样的东西,但带有小部件(或菜单)而不是 Model.Navigation.

<div id="MenuH">
    @if (Model.Navigation != null) 
        {@Display(Model.Navigation)}
</div>

这可能吗?

编辑

我需要在 Layout.cshtml "master page" 的这一部分显示二级菜单(或小部件):

<section class="main-content-zone">
<div class="container">
    <div class="row row-offcanvas">
        <<div class="col-lg-sp-2 col-md-3 col-sm-4" id="bt-sidebar">
            <div id="MenuV">
                <script type="text/javascript">$("#MenuV").html($("#MenuH nav").parent().html());</script>
            </div>
        </div>
        <div class="col-lg-sp-10 col-md-9 col-sm-8 col-xs-12" id="bt-content" role="main">
            <div class="col-xs-12" id="bt-content" role="main">
                <div class="card no-margin-top show-overflow">
                    <div class="row">

                        @if (Model.Content != null){<div class="col-md-12" runat="server" id="Content">@Display(Model.Content)</div>}
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

menu/widget应该去主题的地方(我买了主题)插入js脚本。

您似乎正在尝试将小部件添加到尚不存在的新区域。要实现这一点,您需要做几件事:

1 在 Layout.cshtml 中找到您要呈现小部件的位置。在那里定义一个新的区域名称:

<div class="col-lg-sp-2 col-md-3 col-sm-4" id="bt-sidebar">
    <div class="column-left-zone">
        @Zone(Model.ColumnLeft)
    </div>
</div>

注意:这假设您的 Layout.cshtml 定义了一个函数 like this。如果没有,你可以做 @Display(Model.ColumnLeft)

2 在您的 Theme.txt 中定义区域,以便您可以通过管理员向其中添加小部件 UI:

Zones: Header, Navigation, ..., ColumnLeft

3 现在 'ColumnLeft' 区域在您的管理员 UI 中可用。将管理员 ui 中的小部件添加到 ColumnLeft 区域