列表小部件的 Sitefinity 自定义字段以及如何在 MVC 视图模板中使用它们

Sitefinity Custom Fields for list widgets and how to use them in MVC view templates

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

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

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

我已经在新闻小部件中看到了它的使用,其中每篇新闻文章都有一个关联的图片:

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

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

我的 objective 是将呈现的每个列表项更改为锚点,锚点应使用此相关数据字段的 URL 因为它是 Href 属性.

编辑:

您可以在小部件模板中执行类似的操作:

 @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:如果自定义字段只允许选择一页,那么它应该如下所示:

<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>
}

一个好的起点是 this article