列表小部件的 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
我在 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