Стандартные параметры рендеринга Sitecore MVC

Я хочу, чтобы пользователь мог выбрать цвет фона, используя раскрывающийся список

Я создал новый шаблон, который наследуется от стандартных параметров рендеринга в качестве базового шаблона, а стандартное значение имеет токен $name.

Вот определение цвета шаблона:
ColorName---DropLink---/sitecore/content/Home/Global/Colors

    [SitecoreType(TemplateId = "{55DB8F6A-807D-48F8-A3D1-D81037938F13}", AutoMap = true)]
public interface IColor:IContentBase
{
    string ColorName { get; set; }
}

Я также создал несколько экземпляров шаблона (красный, синий, зеленый)

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

Затем я назначаю цветовой шаблон ViewRendering в качестве параметра.

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

Наконец, в файле cshtml я пытаюсь прочитать этот параметр

@using Glass.Mapper.Sc 
@model INews

<H3> Hot News: </H3>
@{
    var rendering = RenderingContext.Current.Rendering;
    string id = rendering.Parameters["ColorName"];
    var context = new SitecoreContext();
   var result=context.GetItem<IColor>(new Guid(id));

}

<div style="background-color: @NewsRepository.GetBackgroundColor(rendering);" class="panel-body">
    <br/>
    <span>@result.ColorName</span><br/>
    @Model.Title
</div>

Результат всегда {55DB8F6A-807D-48F8-A3D1-D81037938F13}, тогда как я ожидаю «Зеленый». Также пытался использовать API-интерфейсы Sitecore вместо GlassMapper, но все равно получаю Guid .


person AfshinZavvar    schedule 10.01.2017    source источник


Ответы (2)


Попробуйте использовать следующие

@result.ColorName.Value.Tostring();

person Baskar S    schedule 16.01.2017

Поскольку вы используете Glass Mapper, вам следует создавать модели для ваших параметров рендеринга почти так же, как и для любого другого шаблона.

Создайте модель для элемента поиска. Я предлагаю вам создать общий тип, а не называть его «Цвет». Это позволит вам повторно использовать их для других элементов поиска из кода.

[SitecoreType(TemplateId = "{template-guid}", AutoMap = true)]
public class LookupItemModel : GlassBase
{
    public virtual string Text { get; set; }
}

Создайте модель для ваших параметров рендеринга. Убедитесь, что вы установили TemplateId в свой шаблон Rendering Parameters. Обратите внимание, что возвращаемый тип свойства установлен на LookupItemModel, который мы создали выше.

[SitecoreType(TemplateId = "{guid-for-rendering-parameter}", AutoMap = true)]
public class ColorParameters
{
    public virtual LookupItemModel Color { get; set; }
}

Теперь вы можете получить доступ к параметрам рендеринга как строго типизированной модели в ваших представлениях. Из-за того, что тип возврата был правильно установлен выше, Glass автоматически сопоставит guid с элементом поиска, и вам не нужно будет делать отдельный вызов context.GetItem().

@{
    var parameters = Html.Glass().GetRenderingParameters<ColorParameters>();
    string color = parameters.Color.Text;
}

Подробнее об использовании параметров рендеринга в Glass mapper можно узнать в этой статье.

person jammykam    schedule 10.01.2017
comment
Спасибо за Ваш ответ. Я уже определил класс IColor. но стеклянный маппер возвращает руководство - person AfshinZavvar; 10.01.2017
comment
Вам нужно будет обновить исходный вопрос деталями, но это должно сработать. Убедитесь, что вы опубликовали все свои шаблоны и элементы. - person jammykam; 10.01.2017