多个模型的MVC显示模板

wog*_*les 3 asp.net-mvc razor asp.net-mvc-5

为了跟上DRY原则,我在多个视图中生成了一些html,我将其移动到了显示模板中.

由于不同的视图具有不同的模型,我如何使显示模板通用?属性名称相同.

说我有这两个型号:

public class ListModel
{
 public bool Prop1 {get;set;}
 public bool Prop2 {get;set;}
}

public class DisplayModel 
{
 public bool Prop1 {get;set;}
 public bool Prop2 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

这是我的显示模板 - 如何使这更通用 - 我需要它能够接受任何具有相同属性名称的模型?

@model ListModel
{
 if(Model.Prop1)
 {
  <div>Prop1!</div>
 }
 if(Model.Prop2)
 {
  <div>Prop2!</div>
 }
Run Code Online (Sandbox Code Playgroud)

}

这些是我的2个视图:列表和显示

列表:

@model ListModel

@DisplayFor(@Model, "CustomDisplayTemplate")
Run Code Online (Sandbox Code Playgroud)

显示:

@model DisplayModel

@DisplayFor(@Model, "CustomDisplayTemplate") //will currently break as the custom display template expects a ListModel
Run Code Online (Sandbox Code Playgroud)

pet*_*ter 5

使用两个属性创建一个接口:

public interface ISameModel
{
 bool Prop1 { get; }
 bool Prop2 { get; }
}

public class ListModel : ISameModel
{
 public bool Prop1 {get;set;}
 public bool Prop2 {get;set;}
}

public class DisplayModel : ISameModel
{
 public bool Prop1 {get;set;}
 public bool Prop2 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后使用此界面作为模板中的模型

@model ISameModel
Run Code Online (Sandbox Code Playgroud)