从控制器将SItecore项目ID传递给模型

时间:2019-10-03 19:17:43

标签: asp.net-mvc model controller sitecore

我正在从产品模板创建产品。每次客户选择产品以查看有关信息时,都需要加载该产品中的数据。我创建了一个控制器,模型和视图。该模型是用TDS生成的。我需要将项目ID从控制器传递到[SitecoreId]。这是我正在使用的代码:

从布局:

@{var id = Sitecore.Data.ID.Parse("{74A67488-8E33-47E2-86F5-25AD23FDF3D3}"); }
@Html.Sitecore().ControllerRendering("ProductOverview", "Index", new { ItemId = @id })

控制器:

public class ProductOverviewController : Controller
{ 
    private readonly IMvcContext _mvcContext;

    public ProductOverviewController(IMvcContext mvcContext)
    {
        _mvcContext = mvcContext;
    }
    // GET: ProductOverview
    public ActionResult Index()
    {
        var itemId = string.Empty;
        var rc = RenderingContext.CurrentOrNull;
        if (rc != null)
        {
            var parms = rc.Rendering.Properties;
            itemId = parms["ItemId"];
        }

        var dataSource = _mvcContext.GetContextItem<ProductOverviewModel> ();
        return View(dataSource);
    }
}

itemId var具有我从布局传递的正确ID(目前为硬编码)。从这里开始,我对如何将其放入模型完全不知所措。我从搜索中尝试了许多建议,但是模型始终使用当前项目(由GlassBase在模型本身中设置),而不是使用包含该产品数据的产品ID。

我想做的甚至是可能的吗?甚至可以覆盖[SitecoreId]吗?

1 个答案:

答案 0 :(得分:0)

您要在其中使用Glass Mapper设置dataSource值的行。

Glass Mapper允许您使用许多不同的选项来获取Item并将其转换为当前看起来是ProductOverviewModel的“类型”。

您可以使用以下示例(请注意,我已经使用.SitecoreService.GetItem而不是.GetContextItem):

 //pass the GUID into here (you'd need to cast to a Guid first instead of ID)
 var dataSource = _mvcContext.SitecoreService.GetItem<ProductOverviewModel>(guid);
 //or if you wanted to get your ID as a Sitecore Item you could use
  var dataSource = _mvcContext.SitecoreService.GetItem<ProductOverviewModel>(item.Paths.Path);