具有可变模型类型的局部视图

时间:2018-09-21 19:06:34

标签: c# asp.net-mvc razor asp.net-mvc-viewmodel generic-type-argument

从Travis进行更新答案:

public interface IEntity
{
    int Id{get;set;}
    string Name{get;set;}
}
public class Vehicule:IEntity
{
    public int Id{get;set;}
    public string Name{ get; set; }
}
public class Sector:IEntity
{
    public string Id{ get; set; }
    public string Name{ get; set; }
}

以及用于主视图的此模型:

public class MainViewModel
{
    public Vehicule Vehicule{ get; set; }
    public Sector Sector{ get; set; }
}

现在,我想为每个实体实现一个表单(这将是模式表单,但这不是重点)。 它将更加复杂,但是例如:

@Html.TextBoxFor(m=>m.Name)
//etc...

我正在尝试使用泛型类型实现接口,但我真的不知道如何做,尤其是泛型类型。

现在我在局部视图中有@model GenericViewModel<IEntity>,在视图中有MainViewModel

如何将模型传递给具有通用类型的局部视图?

@Html.RenderPartial("_PartialView",????)

我认为MainViewModel中缺少一些内容,但是我尝试了很多事情却没有成功。

如果您能告诉我我想念的东西,那将非常有帮助。

谢谢

1 个答案:

答案 0 :(得分:3)

使用界面公开不同类型的属性或行为。

public interface IEntity
{
    string PropertyA;
    string PropertyB;
    string PropertyC;
}

然后让每个实体继承此接口

public class Entity1 : IEntity { ... }
public class Entity2 : IEntity { ... }
public class Entity3 : IEntity { ... }

现在在您的视图中,您可以将接口属性公开给实体

@model GenericModelType<IEntity>