2017-01-10 111 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();