2017-01-10 71 views
1

我希望用户能够使用下拉列表Sitecore的MVC标准渲染参数

我创建了从标准渲染参数继承为基础模板和标准值有$一个新的模板选择背景颜色名令牌

这里是模板颜色的定义:
ColorName --- DropLink ---/Sitecore的/内容/首页/全球/颜色

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

我也创建模板的多个实例(红,蓝,绿)

enter image description here

然后我给你颜色模板的ViewRendering作为参数。

enter image description here

最后,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},而我希望的 “绿色”。还试图使用SiteMap API的GlassMapper instaed但仍然得到Guid。

回答

2

由于使用的玻璃映射,你应该多为你的渲染参数车型你会为任何其他模板一样。

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

[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

+0

谢谢您的回答。 我已经定义了IColor类。但玻璃映射返回Guid –

+0

你需要更新你的原始问题的细节,但它应该工作。确保您已发布所有模板和项目。 – jammykam

0

尝试使用以下

@result.ColorName.Value.Tostring();