Overriding @Display

本文关键字:@Display Overriding | 更新日期: 2023-09-27 18:09:30

我有不同的模型类型,它们是抽象模型的子类。我是这样渲染的:

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

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

Overriding @Display

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

    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>