所以我的问题是这样的。在sitecore视图中,我可以写这样的东西:
@Html.Sitecore().Field(PictureID.ToString(), Model.Person.Item, cssClass: "img-responsive");
这将获得项目Model.Person.Item上具有ID PictureID的字段的HtmlString,并且在HtmlString中我将添加一个cssClass。所以结果会像
<img src="xxxx" class="img-responsive"/>
对于此视图,模型将是RenderingModel。但是,如果我有一个人作为模型,这个人将有一个名为Picture的属性,将在后面的代码中的某处检索,以便在视图中我会有
@Model.Picture
如何连接视图,控制器和模型,以便从视图中以某种方式发送我希望该图片在返回HtmlString时拥有的cssClass。
答案 0 :(得分:1)
您需要将类名传递给renderField管道。
因此,如果Model.Picture是包含renderField管道输出的HtmlString,则不能在View中动态决定类名,但需要在Model中设置(如果这是一个很好的方法,可以讨论)。
无论如何,在创建模型时,您可以将类名传递到renderField管道中,如下所示:
var renderFieldArgs = new RenderFieldArgs
{
Item = this.Item,
FieldName = "PICTURE FIELD ID"
};
TypeHelper.CopyProperties(parameters, new {@class = "img-responsive"} );
CorePipeline.Run("renderField", renderFieldArgs);
return new HtmlString(renderFieldArgs.Result.FirstPart);
这意味着Model.Picture将始终具有相同的类名。
否则,您可以在Model类上接受类名字符串作为参数。像
这样的东西 public HtmlString GetPictureMarkup(string className)
{
var renderFieldArgs = new RenderFieldArgs
{
Item = this.Item,
FieldName = "PICTURE FIELD ID"
};
TypeHelper.CopyProperties(parameters, new {@class = className} );
CorePipeline.Run("renderField", renderFieldArgs);
return new HtmlString(renderFieldArgs.Result.FirstPart);
}
希望它有所帮助。