Sitecore glassmapper如何从渲染中获取数据源

时间:2016-11-08 14:27:03

标签: sitecore sitecore8 sitecore-mvc glass-mapper

需要有关Sitecore渲染的建议,我想使用glassmodel渲染项目。

我有一个页面,它有很多渲染,每个渲染都有与之关联的数据源。

我知道下面的语句会给我当前的上下文,而不是数据源项。

var context = new SitecoreContext();
            Model = context.GetCurrentItem<HomePage>();

解决我的查询的最佳选择是什么?我通过了this文章。但我真的不相信这种方法,因为我使用IoC(温莎城堡)并且必须为每种方法编写单元测试用例。我可能不得不在以后模拟这些对象。我正在寻找我将使用Interface而不是类的方法。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果您的控制器来自GlassController,则可以使用GetDataSourceItem<I..>()。这将为您提供数据源。

答案 1 :(得分:0)

添加到Gatogorodo的回答

如果您的控制器是从GlassController派生的,或者如果您使用的是GlassView,则可以使用ngForTemplate来获取数据源。

this.DatasourceItem会为您提供所需的模型,该模型可能是项目模板的基本模板之一。

答案 2 :(得分:0)

如果使用Glass Mapper 5,则文档不再涉及使用GlassController。您可以使用IMvcContext,如下所示:

using System.Web.Mvc;
using Glass.Mapper.Sc.Web.Mvc;

public class TitlesController : Controller
{
    public ActionResult Index()
    {
        IMvcContext mvcContext = new MvcContext();

        // will return the DatasourceItem if set, otherwise the page context is returned
        Titles model = mvcContext.GetRenderingItem<Titles>();

        Titles dsModel = mvcContext.GetDataSourceItem<Titles>();

        return View(model);
    }
}