我有一个项目列表,我在网站核心读取并在我的视图中循环。这些项目非常直接,只是作为一系列<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
会产生正确的结果。
这有什么工作吗?我希望这些项目可以在体验查看器中编辑。
答案 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>
}