Передача идентификатора элемента SItecore в модель из контроллера - PullRequest
0 голосов
/ 03 октября 2019

Я создаю продукты из шаблона продукта. Каждый раз, когда клиент выбирает продукт для просмотра информации, необходимо загрузить данные из этого продукта. Я создал контроллер, модель и вид. Модель генерируется с помощью TDS. Мне нужно передать идентификатор элемента в [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 имеет правильный идентификатор, который я передаюиз макета (пока жестко запрограммирован). Отсюда я в полной растерянности от того, как включить это в модель. Я перепробовал десятки предложений от поисков, но модель всегда использует текущий элемент (как установлено GlassBase в самой модели), а не идентификатор продукта, который содержит данные для этого продукта.

Это то, что я хочусделать даже можно? Можно ли переопределить [SitecoreId]?

1 Ответ

0 голосов
/ 11 октября 2019

Строка, в которой вы устанавливаете значение для источника данных с помощью Glass Mapper, - это то место, где вы хотите внести свои изменения.

Glass Mapper позволяет использовать несколько различных параметров для получения Предмета и приведения. к вашему «типу», который в настоящее время выглядит как 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);
...