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

时间:2016-04-21 10:19:52

标签: asp.net-mvc sitefinity sitefinity-8 sitefinity-feather

我已将自定义字段添加到Sitefinity 8.1中的列表小部件,它的类型相关数据,并且它<\ n < strong>数据类型是页面。字段名称为 LinkedPageUrl

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

我无法在Sitefinity的文档中找到任何可以解释我如何在基于MVC的 List.SimpleList.cshtml 视图模板中以编程方式使用此字段的地方。 ; m定制。

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

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

但我不能接近这一点,因为我不知道从哪里开始......模型结构,语法等是什么

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

修改
enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分: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>
}

一个好的起点是this article