【问题标题】:Sitecore MVC Standard Rendering ParametersSitecore MVC 标准渲染参数
【发布时间】:2017-01-10 09:53:45
【问题描述】:

我希望用户能够使用下拉列表选择背景颜色

我创建了一个新模板,它继承自标准渲染参数作为基本模板,标准值具有 $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} 而我期望“绿色”。还尝试使用 Sitecore API 代替 GlassMapper,但我仍然得到 Guid。

【问题讨论】:

    标签: asp.net-mvc sitecore sitecore8 sitecore-mvc glass-mapper


    【解决方案1】:

    由于您使用的是 Glass Mapper,因此您应该像为任何其他模板创建模型一样为您的渲染参数创建模型。

    为查找项创建模型。我建议你创建一个泛型类型而不是称之为“颜色”。这将允许您将它们重新用于代码中的其他查找项。

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

    为您的渲染参数创建一个模型。确保将TemplateId 设置为渲染参数模板。注意属性的返回类型设置为我们上面创建的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;
    }
    

    您可以了解更多关于使用Rendering Parameters in Glass mapper in this article的信息。

    【讨论】:

    • 感谢您的回答。我已经定义了 IColor 类。但玻璃映射器返回 Guid
    • 您需要使用详细信息更新原始问题,但它应该可以工作。确保您已发布所有模板和项目。
    【解决方案2】:

    尝试使用以下方法

    @result.ColorName.Value.Tostring();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      相关资源
      最近更新 更多