asp.net-mvc - 多个模型的 MVC 显示模板

标签 asp.net-mvc razor asp.net-mvc-5

为了跟上 DRY 原则,我在多个 View 中生成了一些 html,我将它移到了显示模板中。

因为不同的 View 有不同的模型,我怎样才能使显示模板通用?属性名称相同。

假设我有这两个模型:

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;}
}

这是我的显示模板 - 我怎样才能使它更通用 - 我需要它能够接受具有相同属性名称的任何模型?
@model ListModel
{
 if(Model.Prop1)
 {
  <div>Prop1!</div>
 }
 if(Model.Prop2)
 {
  <div>Prop2!</div>
 }

}

这些是我的 2 个观点:列表和显示

列表:
@model ListModel

@DisplayFor(@Model, "CustomDisplayTemplate")

展示:
@model DisplayModel

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

最佳答案

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

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;}
}

然后将此接口(interface)用作模板中的模型
@model ISameModel

关于asp.net-mvc - 多个模型的 MVC 显示模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24775897/

相关文章:

c# - Asp.Net Mvc - 不要清除表单中的错误输入

asp.net-mvc - MVC 简单模型绑定(bind)不起作用

c# - ASP.net MVC - 导航并突出显示 "current"链接

asp.net-mvc - 如何使用 MVC3 Razor 布局页面?

asp.net-mvc - 写入/输出未转义的 HTML 字符串

AjaxOptions 完成时

c# - asp.net MVC 数据模型双重验证

javascript - SignalR 问题 : Cannot connect to Hub class

asp.net-mvc-5 - 成功登录后,如何在 Controller 中立即获得Identity UserID?

asp.net-mvc - Html.CheckBox 指定类