带有 List<> 项目的玻璃映射器 Editable() 不工作?
Glass mapper Editable() with List<> items not working?
我有一个从 sitecore 读取并在我的视图中循环的项目列表。这些项目非常简单,只是输出为一系列 <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>
这导致一系列错误被写入结果 HTML:
Index was out of range. Must be non-negative and less than the size of
the collection. Parameter name: index
at
System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument
argument, ExceptionResource resource) at lambda_method(Closure ,
SpecificationInDetailViewModel ) at
Glass.Mapper.Sc.GlassHtml.MakeEditable[T](Expression1 field,
Expression
1 standardOutput, T model, Object parameters, Context
context, Database database, TextWriter writer) Index was out of range.
Must be non-negative and less than the size of the collection.
Parameter name: 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>
然后 all <li>
包含最后一个模型中的文本(显然是某种引用传递问题)。再次删除 Editable
会产生正确的结果。
有什么解决办法吗?我希望这些项目可以在体验查看器中编辑。
您应该将目标玻璃物品作为第一个参数传递给 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。
我有一个从 sitecore 读取并在我的视图中循环的项目列表。这些项目非常简单,只是输出为一系列 <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>
这导致一系列错误被写入结果 HTML:
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) at lambda_method(Closure , SpecificationInDetailViewModel ) at Glass.Mapper.Sc.GlassHtml.MakeEditable[T](Expression
1 field, Expression
1 standardOutput, T model, Object parameters, Context context, Database database, TextWriter writer) Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: 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>
然后 all <li>
包含最后一个模型中的文本(显然是某种引用传递问题)。再次删除 Editable
会产生正确的结果。
有什么解决办法吗?我希望这些项目可以在体验查看器中编辑。
您应该将目标玻璃物品作为第一个参数传递给 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。