将 SItecore 项目 ID 从控制器传递给模型
Passing SItecore Item ID to Model from Controller
我正在从产品模板创建产品。每次客户选择要查看的产品信息时,都需要加载该产品的数据。我已经创建了一个控制器、模型和视图。该模型是使用 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] 甚至可以被覆盖吗?
您要使用 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);
我正在从产品模板创建产品。每次客户选择要查看的产品信息时,都需要加载该产品的数据。我已经创建了一个控制器、模型和视图。该模型是使用 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] 甚至可以被覆盖吗?
您要使用 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);