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

Passing SItecore Item ID to Model from Controller

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

来自布局:

@{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] 甚至可以被覆盖吗?

您要使用 Glass Mapper 为数据源设置值的行是您要进行更改的地方..

Glass Mapper 允许您使用多种不同的选项来获取项目并投射到您的 "type",目前看起来是 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);