如何在 EPiServer 中为 linkItemCollection 自定义默认视图

问题描述

我使用的是 EPiServer 版本 11,我要求当使用 PropertyFor() 方法呈现类型为 linkItemCollection 的属性时,我需要添加一些自定义属性(如果目标为空,则基于条件)以生成链接。>

@Html.PropertyFor(x => x.Layout.LinksCollection)

我有在视图中的 displayTemplates 下创建自定义视图并添加新视图的想法。我的查询是如何获取 linkItemCollection 的认模板以启动它?

解决方法

最简单的选择是自己动手,不用担心属性,唯一的小问题是您可能无法进行内联编辑。

https://www.jondjones.com/learn-episerver-cms/episerver-developers-tutorials/episerver-properties/how-to-display-a-list-of-links-in-episerver/

按照你的路线走

[UIHint("MyView")]
[Display(
    GroupName = SystemTabNames.Settings,Order = 100)]
public virtual LinkItemCollection MyProperty{ get; set; }

在 Views/Shared/DisplayTemplates 添加模板 MyView.cshtml

,

您可以自己完全控制渲染,而不是使用 PropertyFor。

    // FullRefreshPropertiesMetaData asks on-page edit to reload the page 
    // to run the following custom rendering again after the value has changed.
    @Html.FullRefreshPropertiesMetaData(new []{ "RelatedContentLinks" })

    // EditAttributes enables on page-edit when you have custom rendering.
    <p @Html.EditAttributes(m => m.CurrentPage.RelatedContentLinks) >
    @if (Model.CurrentPage.RelatedContentLinks != null)
    {        
        <span>See also:</span>
        foreach (LinkItem item in Model.CurrentPage.RelatedContentLinks)
        {
            <a href="@UrlResolver.Current.GetUrl(item.Href)">@item.Text</a>        }
    }
    </p>

取自EPi documentation

,

感谢您对此的意见。

我设法解决了这个问题,如下所示。

 public static MvcHtmlString LinkItemCollectionFor<TModel,TValue>(this HtmlHelper<TModel> html,Expression<Func<TModel,TValue>> expression)
        {
            MvcHtmlString result = PropertyExtensions.PropertyFor(html,expression);
            return MvcHtmlString.Create(result.ToString().Replace("target=\"_blank\"","target=\"_blank\" rel=\"noopener noreferrer\""));
        }

希望对某人有所帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...