【问题标题】:Sitefinity Custom Fields for list widgets and how to use them in MVC view templates列表小部件的 Sitefinity 自定义字段以及如何在 MVC 视图模板中使用它们
【发布时间】:2016-04-21 10:19:52
【问题描述】:

我在 Sitefinity 8.1 的列表小部件中添加了一个自定义字段,它的 TypeRelated data,它的 Data type 是 页面。字段名称为 LinkedPageUrl

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

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

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

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

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

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

编辑:

【问题讨论】:

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


    【解决方案1】:

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

     @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

    【讨论】:

    • 感谢您的回答。如果它只是一个单页,你会如何改变它?另外,您是否知道我可以阅读有关此主题的任何文档,因为我想更好地理解它。
    • 感谢您的帮助!
    • @VeselinVasilev 嗨,当我尝试这样做时,我遇到了运行时绑定错误,任何想法
    • @ShintuJoseph 没有足够的细节很难排除故障
    • @VeselinVasilev 别管朋友,我搞定了。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多