Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 覆盖@Display_C#_Views_Orchardcms_Models - Fatal编程技术网

C# 覆盖@Display

C# 覆盖@Display,c#,views,orchardcms,models,C#,Views,Orchardcms,Models,我有不同的模型类型,它们是抽象模型的子类。我以这种方式呈现它: <ul> @foreach(dynamic model in @Model.ModelList) { <li> @Display(model) </li> } </ul> @foreach(@model.ModelList中的动态模型) { @显示器(型号) } 如何为每种类型定义“显示”(我想

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

<ul>
    @foreach(dynamic model in @Model.ModelList)
    {
        <li>
            @Display(model)
        </li>
    }
</ul>
    @foreach(@model.ModelList中的动态模型) {
  • @显示器(型号)
  • }

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

我已经找到了解决方案(这并不容易,因为如果是关于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>
    @foreach(@model中的var模型) {
  • @显示(@New.MyModel(Id:model.Id,modelInstance:model))
  • }

真的吗?无论如何,我使用类名(通过反射获得)。另一方面。。也许它也能起作用?