MVC Sitecore View传递属性到属性

时间:2015-11-27 07:28:42

标签: asp.net-mvc sitecore sitecore-mvc

所以我的问题是这样的。在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。

1 个答案:

答案 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);
  }

希望它有所帮助。