【问题标题】:MVC Sitecore View pass attribute to propertyMVC Sitecore View 将属性传递给属性
【发布时间】:2015-11-27 16:04:59
【问题描述】:

所以我的问题是这样的。在 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。但是,如果我有一个 Person 作为模型,并且这个人将有一个名为 Picture 的属性,它将在后面的代码中的某处检索,以便在视图中我会有

@Model.Picture 

我如何连接视图、控制器和模型,以便从视图中以某种方式发送我希望该图片在返回 HtmlString 时具有的 cssClass。

【问题讨论】:

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


    【解决方案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 将始终具有相同的类名。

    否则你可以在你的模型类上有一个方法接受一个类名字符串作为参数。类似的东西

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2021-07-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多