为什么Sitecore MVC Model.Rendering.Item使用Page Item而不是View Rendering Datasource Item初始化?

时间:2015-05-25 17:52:53

标签: razor sitecore sitecore7 sitecore-mvc sitecore7.5

我在Sitecore 7.5中将MVC视图渲染定义为:

        var auth_id = "xxxxxxxxxxxxxxxx";
        var auth_token = "xxxxxxxxxxxxxxxx";
        var jSON_Object = {
            'auth_id': auth_id,
            'auth_token': auth_token
        };
        var calluuid = null;
        //Anruf aufnehmen
        function RecordTheCall() {
            var result = null;
            var post = $.ajax({
                url: "https://api.plivo.com/v1/Account/"+auth_id+"/Call/?status=live",
                type: "GET",
                dataType: "jsonp",
                contentType: "application/json",
                jsonCallback: "parseResponse",
                data: JSON.stringify(jSON_Object),
                success: function(res) {
                    console.log("1");
                    console.log(res);
                    //get uuid from active call
                    calluuid = res.call_uuid;
                    RecordIt();                     
                },
                error: function(err){
                    console.log("E1");
                    console.log(err);
                }
            });
        }

如您所见,此视图渲染的数据源字段设置为媒体库中图像项的GUID。基本上,我试图在内容项布局的特定静态点中从媒体库渲染图像。

我在布局文件中静态地将此视图渲染为:

Item Name: ViewRenderingA
Item Template: View Rendering
Path: /path/to/ViewRenderingA.cshtml
Data Source: {3AD25922-FE0E-45B3-9F2F-7EF61F678E45} // Item Id of the image in the media library

然后在Razor View实现ViewRenderingA.cshtml文件中,我这样做:

@Html.Sitecore().Rendering("/path/to/ViewRenderingA")

我希望@using Sitecore.Mvc @using Sitecore.Mvc.Presentation @model RenderingModel <p>Page Item Name: @Model.PageItem.Name</p> @* <- This correctly shows the content item name. *@ <p>Rendering Name: @Model.Rendering.Item.Name</p> @* <- Why does this also show the content item name instead of the item name of the image in the media library that's linked to the View rendering via data source? *@ 将使用View Rendering的“数据源”字段指向的媒体库项初始化,但它会使用Model.Rendering.Item进行初始化。看起来它完全忽略了数据源字段。我做错了什么?

1 个答案:

答案 0 :(得分:-1)

如果您已提供数据源,则可以使用 Sitecore.Context.Item

访问该项目
Item datasource = Sitecore.Context.Item;

如果您的数据源不会改变,那么一个解决方法是使用其Item ID访问它:

dataSource = Sitecore.Context.Database.GetItem(ItemId);

在您的情况下,项目ID将是您的媒体库内容的ID 我希望这会有所帮助。