带有List<>的玻璃映射器Editable()物品不起作用?

时间:2016-01-26 09:59:39

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

我有一个项目列表,我在网站核心读取并在我的视图中循环。这些项目非常直接,只是作为一系列<li>

输出

模型

[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>

这会导致将一系列错误写入resuting HTML:

  

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

     

在   System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument   参数,ExceptionResource资源)在lambda_method(Closure,   SpecificationInDetailViewModel)at   Glass.Mapper.Sc.GlassHtml.MakeEditable [T](表达式1 field, Expression 1 standardOutput,T模型,对象参数,上下文   context,Database database,TextWriter writer)索引超出范围。   必须是非负数且小于集合的大小。   参数名称:index

如果我删除Editable电话,则<li>正确输出。如果我使用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>

然后所有 <li>包含最后一个模型中的文本(显然是某种传递参考问题)。再次移除Editable会产生正确的结果。

这有什么工作吗?我希望这些项目可以在体验查看器中编辑。

1 个答案:

答案 0 :(得分:8)

您应该将目标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