我们正在使用“列表”内容类型在Orchard CMS中创建一个页面。我们想在列表顶部添加一些超链接,这些超链接会将页面跳转到列表中的特定项目。
我们特别不希望仅链接到列表项的单个页面,而是跳到列表中的位置,并且因为列表项使用相同的View部分呈现,我们不能当然只是对书签进行硬编码。
我们一直在自定义VS中的View Part,并且知道列表项标题是使用代码生成的:
@Display(Model.Header)
这会产生< h1>和< a>像这样包围标题的标签:
< h1 shape-id =“5”>< a href =“/ Orchard / Contents / Item / Display / 36”shape-id =“5”> Marketing< / a>< / h1>
但是,我们找不到一种方法来让Display()方法包含一个'name ='子句,然后我们可以将它用作书签。
我们还尝试在现有代码上方添加一个新标记,例如:
< a name="@Model.Header" >< /a >
@Display(Model.Header)
但是当然Model.Header是一个对象引用,而不是一些文本,所以这个失败了。在此之后,我们迷失了各种方法,试图找到Model对象的属性来获取标题作为文本,但不能。
必须有一种方法可以重载Display()方法以使其包含'name ='子句,任何人都有任何想法?
答案 0 :(得分:0)
尝试:
<a name="@Model.Header.Items[0].Title" />
它并不漂亮,但是当我将其放在我创建的传记内容类型的备用模板中时,它对我有用(Views / Content-Bio.Summary.cshtml)。
根据Bertrand的建议,您可以尝试:
<a name="@Model.Title" />
在您的模板中替代。
答案 1 :(得分:0)
Model.Header只是一个区域。真正呈现标题的是添加到该区域的形状。您应该使用Shape Tracing(Designer Tools模块的一部分)来了解形状的层次结构。您不需要“重载显示方法”。你需要的是覆盖渲染标题的形状的模板(不是Model.Header,而是里面的东西)。 您可能需要阅读此内容:http://weblogs.asp.net/bleroy/archive/2011/03/27/taking-over-list-rendering-in-orchard.aspx和此http://weblogs.asp.net/bleroy/archive/2011/05/23/orchard-list-customization-first-item-template.aspx