我正在从产品模板创建产品。每次客户选择产品以查看有关信息时,都需要加载该产品中的数据。我创建了一个控制器,模型和视图。该模型是用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]吗?
答案 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);