1

我在 Sitefinity 8.1 的列表小部件中添加了一个自定义字段,它的类型相关数据,它的数据类型页面。字段名称是LinkedPageUrl

在后端完美运行,允许我从系统中选择一个页面并将其存储在该特定列表项中。

我在 Sitefinity 的文档中找不到任何地方解释了我将如何在我正在自定义的基于 MVC 的List.SimpleList.cshtml视图模板中以编程方式使用此字段。

我在新闻小部件中看到了这一点,其中每篇新闻文章都有一个关联的图像:

<img src="@Html.Raw(item.Fields.RelatedImg.Fields.MediaUrl)" class="img-responsive" />

但我没有接近这个,因为我不知道从哪里开始......模型结构,语法等是什么?

我的目标是将呈现的每个列表项更改为一个锚点,并且该锚点应使用此相关数据字段的 URL 作为其 Href 属性。

编辑:
在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

2

您可以在小部件模板中执行以下操作:

 @foreach (var item in Model.Items)
{
    <h3 @Html.InlineEditingAttributes(Model.ProviderName, Model.ContentType.FullName, (Guid)item.Fields.Id)
        @Html.InlineEditingFieldAttributes("Title", "ShortText")>

        @item.Fields.Title
    </h3>
    <ul>
        @foreach (var listItem in ((ListViewModel)item).ListItemViewModel.Items)
        {
            <li @Html.InlineEditingAttributes(Model.ProviderName, ((ListViewModel)item).ListItemViewModel.ContentType.FullName, (Guid)listItem.Fields.Id)>
                <div @Html.InlineEditingFieldAttributes("Title", "ShortText")>
                    @listItem.Fields.Title
                </div>

                <div class="sfMultiRelatedItmsWrp">
                    <h2 class="sfrelatedItmTitle">Related pages</h2>

                    @foreach (var link in listItem.Fields.LinkedPageUrl)
                    {
                        var node = PageManager.GetManager().GetPageNode(link.Fields.Id);
                        var url = PageExtesnsions.GetFullUrl(node);

                        <div>@link.Fields.Title - @url</div>
                    }
                </div>
            </li>
        }
    </ul>
}

这是因为您选择了每个列表项可以选择多个页面。

编辑:确保包括以下命名空间

@model Telerik.Sitefinity.Frontend.Mvc.Models.ContentListViewModel
@using Telerik.Sitefinity.Frontend.Lists.Mvc.Models;
@using Telerik.Sitefinity.Frontend.Mvc.Helpers;
@using Telerik.Sitefinity.Modules.Pages;

EDIT2:如果自定义字段只允许选择 1 页,那么它应该如下所示:

<div class="@Model.CssClass">

@foreach (var item in Model.Items)
{
    <h3 @Html.InlineEditingAttributes(Model.ProviderName, Model.ContentType.FullName, (Guid)item.Fields.Id)
        @Html.InlineEditingFieldAttributes("Title", "ShortText")>

        @item.Fields.Title
    </h3>
    <ul>
        @foreach (var listItem in ((ListViewModel)item).ListItemViewModel.Items)
        {
            <li @Html.InlineEditingAttributes(Model.ProviderName, ((ListViewModel)item).ListItemViewModel.ContentType.FullName, (Guid)listItem.Fields.Id)>
                <div @Html.InlineEditingFieldAttributes("Title", "ShortText")>
                    @listItem.Fields.Title
                </div>

                <div class="sfMultiRelatedItmsWrp">
                    <h2 class="sfrelatedItmTitle">Related pages</h2>

                    @{
                        var node = PageManager.GetManager().GetPageNode(listItem.Fields.LinkedPageUrl.Fields.Id);
                        var url = PageExtesnsions.GetFullUrl(node);
                    }

                    <div>@listItem.Fields.Title - @url</div>
                </div>
            </li>
         }
    </ul>
}

一个很好的起点是这篇文章

于 2016-04-22T02:58:44.563 回答