在Sitecore中将参数传递给Razor视图渲染

5

我现在正在尝试渲染Brightcove媒体播放器,并传递动态视频ID。brightcoveData.Id是有效的GUID,但我似乎无法正确传递参数,以便渲染理解它。从此组件中,我收到一个错误消息,指出“未选择媒体项”。

var embedMedia = new System.Collections.Specialized.NameValueCollection();
            embedMedia.Add("playerId", "E7766078969C3AB892DD158E0E7230B9");
            embedMedia.Add("width", "400");
            embedMedia.Add("height", "300");

            @Html.Sitecore().Rendering("/sitecore/layout/Renderings/Media Framework/Embed Media", new
                               {
                                   DataSource = brightcoveData.Id,
                                   Parameters = embedMedia
                               })

任何帮助都将不胜感激。谢谢。


渲染的HTML输出是什么?它看起来正确吗? - sestocker
还可以尝试从视频GUID中去掉花括号{}。 - xoail
是的,渲染的HTML输出看起来没问题。看起来我传递DS的方式有误。 - Thomas Taylor
@xoail - 去掉花括号没有起到任何作用。 - Thomas Taylor
请遵循此答案 http://stackoverflow.com/questions/25597940/sitecore-controller-rendering-datasource 尝试通过Sitecore传递渲染,而不是使用数据源参数。 - xoail
是的,@xoail,这是我工作的一部分基础。我删除了参数,似乎并没有什么影响。 - Thomas Taylor
2个回答

9

好的,在与Sitecore技术支持交流后,我得到了答案:

@Html.Sitecore().Rendering("/sitecore/layout/Renderings/Media Framework/Embed Media", new
                               {
                                   DataSource = brightcoveData.Id,
                                   Parameters = "playerid=E7766078969C3AB892DD158E0E7230B9&height=300&width=400"
                               })
brightcoveData.Id 只是一个 GUID 字符串,例如 "{XXXX-...-etc}"。 playerid 是用于播放器的 Sitecore 项 ID。
最终代码如下,效果很棒!谢谢大家。

0

我觉得你不能用这些参数覆盖默认属性。

Sitecore会解析这些参数,并将它们作为一个KeyValuePair<string, object>对象添加。你可以通过Rendering.Parameters访问此对象。

如果你想设置自己的Datasource和参数,你需要在Sitecore的presentation details中设置Datasource


我不同意http://ctor.io/specify-datasource-item-of-a-statically-binded-rendering/。 - xoail
@xoail 我查看了SitecoreHelper类的内部,它所做的是:EnumerableExtensions.Each<KeyValuePair<string, object>>((IEnumerable<KeyValuePair<string, object>>) TypeHelper.GetProperties(parameters), (Action<KeyValuePair<string, object>>) (pair => rendering.Properties[pair.Key] = ObjectExtensions.ValueOrDefault<object, string>(pair.Value, (Func<object, string>) (o => o.ToString())))); 在我看来,它将参数添加为呈现的属性。我找不到任何覆盖现有属性的内容。 - Fabian
作为一种解决方法,我可以尝试将嵌入式媒体(使用现有的数据源进行修改)添加到占位符中,并仅在条件下显示它。我可能会尝试这种方法... 给Sitecore支持团队多1-2天时间来回答。 - Thomas Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接