Редактор стекла Редактируемый () с элементами List<>, не отображаемыми в режиме редактирования

У меня есть список элементов, которые я читаю из sitecore и зацикливаю в своем представлении. Предметы довольно прямолинейны и просто выводятся в виде серии

  • Модель:

    [SitecoreType(TemplateId = "{1044CFB5-2B85-4A8D-9DCC-34764D2AF5B3}", AutoMap = true)]
        public class Footer 
        {
            public virtual Item Item { get; set; }
            [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }
            [SitecoreField(FieldName ="Copyright Text First",FieldType = SitecoreFieldType.SingleLineText)]
            public virtual string CopyrightTextFirst { get; set; }
    
            [SitecoreField(FieldName ="Copyright Text Last",FieldType = SitecoreFieldType.SingleLineText)]
            public virtual string CopyrightTextLast { get; set; }
            public IEnumerable<BrandNavigaion> lstBrandNav {get;set; }
        }
         [SitecoreType(TemplateId = "{A87A00B1-E6DB-45AB-8B54-636FEC3B5523}", AutoMap = true)]
        public class BrandNavigaion
        {
            public virtual Item Item { get; set; }
           [SitecoreInfo(SitecoreInfoType.Path)]
            public virtual string Path { get; set; }
            //[SitecoreField(FieldName = "Item name")]
            public virtual string Itemname { get; set; }
            [SitecoreField(FieldName = "Destination URL",FieldType=SitecoreFieldType.GeneralLink)]
            public virtual string DestinationURL { get; set; }
            [SitecoreField(FieldName = "Is Active ", FieldType = SitecoreFieldType.Checkbox)]
            public virtual bool IsActive  { get; set; }
            public virtual IEnumerable<Sitecore.Data.Items.Item> Children { get; set; }
            //public virtual IEnumerable<BrandSubNavigaion> Children { get; set; }
        }
    

    Посмотреть

     @foreach (var item in Model.lstBrandNav)
                        {
                                <li>
                                    <a href="@item.DestinationURL">
                                        @Editable(item, i => i.Itemname)
                                    </a>
                                </li>
                            if (item.Children != null && item.Children.Count() > 0)
                            {
                                <li class="">
                                    <a data-toggle="dropdown">Associate Sites <i class="fa fa-angle-down"></i></a>
                                    <ul>
                                        @foreach (var childitem in item.Children)
                                        {
                                            <li><a href="">@childitem.Name</a></li>
                                        }
                                    </ul>
                                </li>
                            }
                        }
    

    Результат отображается правильно в режиме предварительного просмотра:

    Но в режиме редактирования, как показано ниже

    Пожалуйста, помогите мне, что не так в моем коде.

  • 1 ответ

    Прежде всего вам не нужно иметь 2 поля DestinationUrl и ItemName. Вы можете иметь на DestionationUrl также значение ItemName. DestinationUrl - это общее поле ссылки, которое содержит URL-адрес и текстовое поле.

    И вы можете иметь несколько свойств для поля General Link:

    введите описание изображения здесь

    Можете ли вы изменить свой код

        SitecoreField(FieldName = "Destination URL",FieldType=SitecoreFieldType.GeneralLink)]
        public virtual Glass.Mapper.Sc.Fields.Link DestinationURL { get; set; }
    

    и обработать вашу ссылку следующим образом:

          @using (BeginRenderLink(item, x => x.DestinationUrl, new { @class = "your class" }, isEditable: Sitecore.Context.PageMode.IsPageEditor))
            {
                @(item.DestinationUrl != null ? item.DestinationUrl.Text : "Select a link")
            }
    

    BeginRenderLink из стекла:

       /// <summary>
        /// Render HTML for a link with contents
        /// </summary>
        /// <typeparam name="T">The model type</typeparam>
        /// <param name="model">The model</param>
        /// <param name="field">The link field to user</param>
        /// <param name="attributes">Any additional link attributes</param>
        /// <param name="isEditable">Make the link editable</param>
        /// <returns></returns>
        public virtual RenderingResult BeginRenderLink<T>(T model, Expression<Func<T, object>> field,
            object attributes = null, bool isEditable = false)
        {
            return GlassHtml.BeginRenderLink(model, field, this.Output, attributes, isEditable);
    
        }
    
    Другие вопросы по тегам