【问题标题】:Glass mapper Editable() with List<> items not working?带有 List<> 项目的玻璃映射器 Editable() 不起作用?
【发布时间】:2016-01-26 09:59:39
【问题描述】:

我有一个我正在从 sitecore 中读取并在我的视图中循环播放的项目列表。这些项目非常简单,只是输出为一系列&lt;li&gt;

型号

[SitecoreType(AutoMap = true)]
public class Model
{
    [SitecoreId]
    public Guid Id { get; set; }
    public string Name { get; set; }

    public string DisplayName { get; set; }

    public string Path { get; set; }
    [SitecoreField]
    public virtual string TabText { get; set; }
}

我在一个

中使用了上面的模型

视图模型

public class ViewModel
{
    public List<Model> Models {get; set;}
}

我正在努力在我的视图中使用这个视图模型并使用 glassmappers Editable 功能:

查看

@using Sitecore.Mvc
@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<ViewModel>
<ul>
    @for (int specCounter = 0; specCounter < Model.Models.Count; specCounter++)
    {
        <!--@specCounter-->
        <li>
            @Editable(e => e.Models[specCounter].TabText)</li>
    }
</ul>

这会导致一系列错误被写入返回的 HTML:

索引超出范围。必须是非负数且小于 集合。参数名称:索引

在 System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument 参数,ExceptionResource 资源)在 lambda_method(闭包, SpecificationInDetailViewModel )在 Glass.Mapper.Sc.GlassHtml.MakeEditable[T](Expression1 field, Expression1 标准输出,T 模型,对象参数,上下文 上下文、数据库数据库、TextWriter 编写器)索引超出范围。 必须是非负数且小于集合的大小。 参数名称:索引

如果我删除 Editable 调用,那么 &lt;li&gt; 将正确输出。如果我使用foreach 循环(而不是for 循环):

@using Sitecore.Mvc
@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<ViewModel>
<ul>
    @foreach (var model in Model.Models)
    {
        <!--@specCounter-->
        <li>
            @Editable(e => model.TabText)</li>
    }
</ul>

然后all&lt;li&gt; 包含来自最后一个模型的文本(显然是某种通过引用传递的问题)。再次删除 Editable 会产生正确的结果。

有什么解决办法吗?我希望这些项目可以在体验查看器中进行编辑。

【问题讨论】:

    标签: c# asp.net-mvc sitecore glass-mapper sitecore-mvc


    【解决方案1】:

    您应该将目标 Glass Item 作为第一个参数传递给Editable:

    @for (int specCounter = 0; specCounter < Model.Models.Count; specCounter++)
    {
        <!--@specCounter-->
        <li>
            @Editable(Model.Models[specCounter], e => e.TabText)</li>
    }
    

    或foreach:

    @foreach (var model in Model.Models)
    {
        <!--@specCounter-->
        <li>
            @Editable(model, e => e.TabText)</li>
    }
    

    更多信息,请查看Glass Tutotial - MVC Page Editor Support。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2012-02-10
      相关资源
      最近更新 更多