覆盖@Display

时间:2013-04-17 09:06:41

标签: c# views orchardcms models

我有不同的模型类型,它们是抽象模型的子类。我以这种方式呈现它:

<ul>
    @foreach(dynamic model in @Model.ModelList)
    {
        <li>
            @Display(model)
        </li>
    }
</ul>

如何为每种类型定义“显示”(我想为每种模型类型设置不同的cshtmls)?我认为它与形状有关。如何为每种类型定义一个形状和视图?这是正确的做法吗?

1 个答案:

答案 0 :(得分:0)

我已经找到了解决方案(这并不容易,因为如果它是关于乌节的话我就是新手了) 创建新形状:

    public void Discover(ShapeTableBuilder builder)
    {
        builder.Describe("MyModel").OnDisplaying(
            displaying =>
                {
                    var elementObject = displaying.Shape;
                    var elementId = elementObject.Id;
                    elementObject.Metadata.Alternates.Add("MyModel__" + EncodeAlternateElement(elementId));
                });
    }

    private string EncodeAlternateElement(string alternateElement)
    {
        return alternateElement.Replace("-", "__").Replace(".", "_");
    }

在视图中使用它:

<ul>
@foreach (var model in @Model)
{
    <li>

        @Display(@New.MyModel(Id: model.Id, modelInstance: model))

    </li>
}
</ul>