Asp.net
如何在 Orchard 中設置小元件的樣式?
我正在嘗試在 Orchard 中建構一個主題(轉換我擁有的現有模板),但是在設置部落格檔案小元件的樣式時遇到了問題。我有一個區域“側邊欄”,我在其中放置了小元件。
為了讓它輸出我想要的標記,我在我的視圖文件夾中創建了一個新模板:Widget-BlogArchives.cshtml 所有模板都將小元件的內容包裝在一個 div 中,如下所示:
<div class="box box_small"> @Display(Model.Content) </div>所以我希望所有的小元件內容都在我的 div 中。然而生成的 HTML 看起來像這樣:
<article class="widget-blog-archives widget" shape-id="15"> <header shape-id="15"> <h1 shape-id="15">The Archives</h1> </header> <div class="box box_small" shape-id="15"> <div class="archives" shape-id="16"> <ul class="archiveMonthList" shape-id="16"> <li class="first last" shape-id="16"> <a href="(shortened)/10" shape-id="16">October 2011 (1)</a> </li> </ul> </div> </div> </article>我不明白整篇文章的包裝來自哪裡?如何將標題放入我的 div 並將其更改為 a ?
有人還可以解釋一下模型中標題“檔案”的儲存位置嗎?我在形狀跟踪工具中查看了模型,但找不到它…
謝謝。
更新
正如 Bertrand 解釋的那樣,我對 Widget-BlogArchives.cshtml 進行了一些更改:
@using Orchard.ContentManagement @using Orchard.Widgets.Models @{ Model.Metadata.Wrappers.Clear(); var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title; } <div class="box box_small"> <h3>@title</h3> @Display(Model.Content) </div>這現在生成了我想要的 HTML。
此標記來自小元件包裝器。可以通過呼叫 Model.Metadata.Wrappers.Clear() 來抑制包裝器。然後,您可以完全從您自己的小元件覆蓋中接管渲染。
如果您打開 widget.wrapper.cshtml,您將找到第二個問題的答案:
var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title;也可以這樣做:
var title = Model.ContentItem.WidgetPart.Title