问题描述
我使用的是 EPiServer 版本 11,我要求当使用 PropertyFor() 方法呈现类型为 linkItemCollection 的属性时,我需要添加一些自定义属性(如果目标为空,则基于条件)以生成超链接。>
@Html.PropertyFor(x => x.Layout.LinksCollection)
我有在视图中的 displayTemplates 下创建自定义视图并添加新视图的想法。我的查询是如何获取 linkItemCollection 的默认模板以启动它?
解决方法
最简单的选择是自己动手,不用担心属性,唯一的小问题是您可能无法进行内联编辑。
按照你的路线走
[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>
,
感谢您对此的意见。
我设法解决了这个问题,如下所示。
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\""));
}
希望对某人有所帮助。