界面不使用显示模板

2024-01-06

我在显示模板以及处理接口和实现该接口的对象时遇到问题。在示例中,我有许多对象,我想以固定的方式呈现它们,我决定创建一个界面并在视图中引用它,我决定将其放入共享显示模板文件夹中。DisplayFor似乎不适用于传递给它的在视图中实现接口的对象,有人知道解决方案吗?

通过代码解释可能更容易,所以我写了一个简单的例子。基接口和继承它的两个类:

public interface IPet
{
    String Name { get; }
}

public class Dog : IPet
{
    public String Name { get; set; }
}

public class Cat : IPet
{
    public String Name { get; set; }
}

共享显示模板中的示例显示模板

@model IPet

<div>@Model.Name</div>

要传递给视图的示例视图模型

public class VM
{
    public IPet Master { get; set; }
    public IEnumerable<IPet> Minions { get; set; }
}

控制器(在本例中用于创建模拟信息)

    public ActionResult Index()
    {
        var viewModel = new VM();
        viewModel.Master = new Cat(){Name = "Fluffy"};

        var minions = new List<IPet>();

        minions.Add(new Dog(){Name = "Dave"});
        minions.Add(new Dog(){Name = "Pete"});
        minions.Add(new Cat(){Name = "Alice"});

        viewModel.Minions = minions;

        return View(viewModel);
    }

终于看到了我所期待的景色DisplayFor to work

@model ViewInheritance.Models.VM

<h2>Master</h2>

@Html.DisplayFor(x => x.Master)

<h2>Minions</h2>

@Html.DisplayFor(x => x.Minions)

既然所有的对象都在视图模型中定义为接口,为什么不能使用显示模板呢?

我发现的一种解决方案是简单地使用代码

@Html.DisplayFor(x => x.Master, "IPet")

回顾一下,问题是:

为什么会发生这种情况? 有没有办法制作DisplayFor正确地算出一个类型Cat它实现了IPet事实上应该着眼于共同的观点IPet.cshtml?

Thanks


启动一个新的 MVC 应用程序并修复代码以实际编译视图渲染效果良好。将视图移动到共享文件夹时也能呈现良好的效果。

我向 IPet 添加了 setter:

public interface IPet
{
    String Name { get; set; }
}

我更新了实现并添加了公共访问器:

public class Dog : IPet
{
    public String Name { get; set; }
}

public class Cat : IPet
{
    public String Name { get; set; }
}

I left your VM alone and also did not change any code in your View. Pressing F5, running the MVC application rendered the results as expected (See image).enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

界面不使用显示模板 的相关文章

随机推荐

  • AngularJS:使用多行写入和读取文本区域

    我不敢相信为什么我找不到这个主题的任何内容 我得到了一个表格 其中包含姓氏 输入 名字 输入 描述 文本区域 因为我想提供几行 让我们从创建一个新对象开始 好的 你输入类似的内容 姓 fox 名 peter 描述 what can I sa
  • fread():从文件读取(不对齐)会导致跳过字节

    我有一个文件 使用 C 我想使用 fread 来自 stdio h 读取它的内容并将其写入结构的成员中 在我的例子中 开头有一个 2 字节 int 后面跟着一个 4 字节 int 但是 在将文件内容正确写入结构的前两个字节变量后 它会跳过两
  • 是否可以将 Asterisk 作为支持 WebRTC 的移动应用程序的信令服务器

    是否可以将 Asterisk 作为支持 WebRTC 的移动应用程序的信令服务器 我发现我需要在node js 中创建信令服务器 我想知道 Asterisk 是否可以为我完成这项工作 此外 WebRTC 媒体是否通过信令服务器传递 或者 是
  • 在 GitLab CI 管道中使用 docker-compose

    我正在尝试使用以下内容实现 GitLab 持续集成 CI 管道 gitlab ci yml file image docker latest When using dind it s wise to use the overlayfs dr
  • Matlab 相当于 Python 的“None”

    Matlab中是否有一个关键字大致相当于None在Python中 我试图用它来标记函数的可选参数 我正在翻译以下Python代码 def f x y None if y None return g x else return h x y 进
  • Winrt StreamWriter 和 StorageFile 未完全覆盖文件

    在这里快速搜索一无所获 因此 我开始使用一些相当迂回的方法在我的 WinRT 应用程序中使用 StreamWriter 阅读效果很好 写作则不同 我看到的是 当我选择要写入的文件时 如果我选择一个新文件 那么就没有问题 该文件已按我的预期创
  • 如何在Android上创建简单的日历[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何通过 Typescript 使用全局 Node 包

    可以通过安装全局包来使用它们npm install g 如果以这种方式安装 Typescript 类型 它们也可以在全局文件夹中使用 例如 usr lib node modules在Linux系统上 当使用以下命令转译打字稿源文件时tsc
  • Spring Data JPA底层机制无实现

    我开始阅读本教程 春季启动教程 https spring io guides tutorials bookmarks 在此我读到 在模型模块下 他们实现了 POJO 和存储库接口 gt github上的教程 https github com
  • 如何使用JNI代码正确导入Android库?

    背景 我制作了一个使用 JNI 进行位图处理的小型 SDK 链接here https github com AndroidDeveloperLB AndroidJniBitmapOperations 它只有 2 个项目 一个示例项目 演示
  • 如何在 Android 中连接到加密算法未知的 WiFi 网络?

    我研究过这个问题堆栈溢出 但所有答案都指定了如何使用已知加密算法 主要是 WEP 连接到网络 在我的应用程序中 我检索可用 wifi 网络的列表 并将它们显示在ListView using WifiManager 当用户单击列表中的一项时
  • 检索项目的父级时出错:找不到与给定名称“@android:style/TextAppearance.Holo.Widget.ActionBar.Title”匹配的资源

    我正在实现 ActionBar 以使用 xml 中的样式脚本设置文本的颜色 但是当我运行应用程序时出现错误 有人知道我缺少什么吗 这是我的 style xml 文件
  • 有没有办法确保 MSI 安装程序每次都更新 .exe 文件?

    是否有一些简单 无麻烦的方法可以让 MSI 安装在 exe 文件更新时始终替换 exe 文件 即主输出 这只是基本常识 无论我在哪里搜索 总是有关于主要版本和次要版本以及补丁的复杂讨论 必须有一些简单的方法来确保文件在安装过程中被替换 否则
  • 是否可以使用 POST 从 URL 直接上传到 S3?

    我知道有一种方法可以使用 POST 直接从 Web 浏览器上传到 S3 而无需将文件发送到后端服务器 但是有没有办法通过 URL 而不是 Web 浏览器来完成此操作 例如 上传位于以下位置的文件http example com dude j
  • Unix sendmail - html 嵌入图像不起作用

    在 SO com 之前的帖子中 我尝试构建脚本来将电子邮件发送到我的 Outlook 帐户 并将图像内嵌在电子邮件正文中 但 html 内容显示在 html 中 而不是显示图像 请帮忙 这是我的片段 echo TO email protec
  • 插入排序的比较次数

    在这个程序中 我想计算插入排序中数据比较的次数 但是我的代码没有按我的预期工作 def insertionSort list numOfComp 0 for i in range 1 len list value list i j i 1
  • 多线程服务器,信号处理。 POSIX

    我在处理多线程服务器中的信号处理时遇到问题 我为每个连接创建一个线程 但我希望有一个选项可以使用 SIGINT 终止服务器 然而 当其中一个线程捕获信号时 事情就会变得很糟糕 有没有办法阻止除主线程之外的线程获取信号 线程从创建它的线程继承
  • Intel AVX:为什么双精度浮点变量没有 256 位版本的点积? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • API 级别 24 中已弃用 ApplicationTestCase

    我创建了一个默认的空项目安卓工作室2 1 2 with API 24 在示例项目中 Google 提供了一个折旧的类应用测试用例 https developer android com reference android test Appl
  • 界面不使用显示模板

    我在显示模板以及处理接口和实现该接口的对象时遇到问题 在示例中 我有许多对象 我想以固定的方式呈现它们 我决定创建一个界面并在视图中引用它 我决定将其放入共享显示模板文件夹中 DisplayFor似乎不适用于传递给它的在视图中实现接口的对象