具有嵌套模型类的 Razor 视图

2024-01-28

我有一个嵌套类,例如:

public class Jar
{
    public IEnumerable<NailClippings> Nails { set; get; }
    public IEnumerable<People> Donors { set; get; }
}

我的控制器通过了一个Jar在我看来,字符串类型为

@model Test.ViewModels.Jar

我可以循环浏览内容Nails and Donors很容易用这样的东西

@foreach(var item in Model.Nails)

我的问题是使用 HTML 帮助程序为我生成显示名称

@Html.DisplayNameFor(model => model.Nails.Length)

我想出了一个解决方案,将内部嵌套类的类型更改为List, 附加.ToList()在我的查询结束时并将该行更改为

@Html.DisplayNameFor(model => model.Nails[0].Length)

被迫使用List并有一个索引[0]显示名字对我来说很愚蠢。是否有引用内部嵌套类属性的替代方法?

Edit: View

<table>
    <tr>
        <th>@Html.DisplayNameFor(model => model.Nails[0].Length)</th>
        .
        .
    </tr>
    @foreach(var item in Model.Nails){
    <tr>
        <td>@Html.DisplayFor(modelItem => item.Length</td>
        .
        .
    </tr>
    }
</table>

您不需要在视图中编写任何循环。这让他们变得如此丑陋。

只需为集合类型定义相应的显示模板即可。例如你会创建~/Views/Shared/DisplayTemplates/NailClippings.cshtml将强类型化为集合的单个元素的部分视图:

@model NailClippings
<tr>
    <td>
        @Html.DisplayFor(x => x.Length)
    </td>
    .
    .
</tr>

现在在你的主视图中它就像这样简单:

@model Jar
<table>
    <thead>
        <tr>
            <th>Length</th>
            .
            .
        </tr>
    </thead>
    <tbody>
        @Html.DisplayFor(x => x.Nails)
    </tbody>
</table>

显示/编辑器模板按惯例工作。所以当你在主视图中使用时@Html.DisplayFor(x => x.Nails),ASP.NET MVC会分析的类型Nails财产,并将看到它是一个IEnumerable<NailClippings>收藏。所以它会先开始在里面寻找对应的显示模板~/Views/CurrentController/DisplayTemplates/NailClippings.cshtml,然后在里面~/Views/Shared/DisplayTemplates/NailClippings.cshtml最后它会回退到default display template http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html。选择模板后,ASP.NET MVC 将自动为您执行集合属性的每个元素的模板,这样您就不必担心在视图中编写一些循环、担心索引等问题。

这也适用于编辑器模板:@Html.EditorFor(x => x.Nails)会寻找~/Views/Shared/EditorTemplates/NailClippings.cshtml。这里的好处是生成的输入字段将具有正确的名称,并且当您提交表单时,默认模型绑定器将自动重新水合 HttpPost 操作作为请求参数的视图模型。

基本上,如果您尊重框架所遵循的约定,您将使您的生活变得更加轻松。

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

具有嵌套模型类的 Razor 视图 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 返回视图作为 JSON 对象的一部分

    我有一个应用程序只加载一次完整视图 我这样做的原因并不重要 重要的是 其余内容只会以部分视图的形式返回 除了一些内容之外 我还有一些 JSON 对象 我想通过每个 AJAX 请求在服务器之间来回传递 有没有办法返回一个 JSON 对象 并将
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 从 SQLCE 4 迁移到 SQL Server 2008

    因此 作为早期采用者 我开发了一个基于 SQLCE4 ASP Net MVC3 和实体框架CTP5 http www microsoft com downloads en details aspx FamilyID 35adb688 f8a
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我

随机推荐

  • Drupal 迁移 - 现在只有首页可以使用

    我刚刚从 ISP 迁移了 Drupal 站点 到专用的 Linux CentOS 服务器 MySQL 数据库已配置并生成首页 没有错误 问题是只有主页可以使用 所有其他页面均显示 404 页面未找到错误 所以 mysite com 可以工作
  • 具有不同布局的 Rails 邮件程序

    我在通知程序模型中对所有电子邮件 20 多封电子邮件 使用一种布局 但是有时我只想发送一封纯文本电子邮件 根本没有布局或 html 我似乎无法弄清楚如何 如果我尝试发送纯文本电子邮件 我仍然可以获得布局以及电子邮件中的所有 HTML 我正在
  • 有人知道从头开始创建增强现实应用程序或使用开源框架的好教程吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找涵盖创建 AR 应用程序每一步的优秀教程 如果它还涵盖光学等背后的一些理论 那将是有益的 一个好的设置是使用AR工具包 http
  • php header 立即定位?

    为什么 Location 标头没有立即重定向页面 它总是在重定向之前执行整个过程 我举一些例子 header Location http www php net f fopen demo txt w fwrite f Test fclose
  • 如何生成不生成超过 X 个连续元素的随机数序列

    好吧 我真的不知道如何正确地提出这个问题 因为我几乎不知道如何用一句话来描述我想要的东西 我很抱歉 让我开门见山 你可以跳过剩下的 因为我只是想表明我已经尝试过一些东西 而不是来这里一时兴起问问题 我需要一个生成 6 个随机数的算法 但在该
  • 无法从 Angular http 检索数据

    我正在尝试使用 http 模块使用下面的代码从 mongodb 中的集合中检索数据 getPosts return this http get http localhost 5005 blog getposts map res gt con
  • 如何使用 Android 代码使用呼叫拨号器(键盘)启动隐藏的应用程序? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想通过以编程方式拨打某些预定义号码来启动我的应用程序 这是一个隐藏的应用程序 例如 111 我打开拨号器并输入 111 然后我的应用程序收
  • 如何使用java在数组中获取用户输入?

    如何使用Java在数组中获取用户输入 即我们不会在程序中自己初始化它 但用户将给出它的值 请指导 这是一个简单的代码 用于读取字符串stdin 将它们添加到List
  • Matlab 图像中的自主接缝检测

    I m trying to detect seams in welding images for an autonomous welding process I want to find pixel positions of the det
  • JFileChooser 更改 Windows 中的默认目录

    我想将 JFileChooser 的默认目录更改为 Windows 上的 我的音乐 这个目录是C Users Fre Music在我的帐户上 因为我的用户名是Fre 默认设置为C Users Fre Documents 我认为取决于操作系统
  • 为所有新命令对象设置自定义默认 CommandTimeout

    默认命令超时 http msdn microsoft com en us library system data sqlclient sqlcommand commandtimeout aspx值为 30 秒 您可以通过执行以下操作手动更改
  • AngularJS:初始化 ZURB Foundation JS

    我同时使用 AngularJS 和 Foundation 要初始化 Foundation JS 您必须进行以下调用 document foundation 在 AngularJS 应用程序中进行此调用的最佳方式是什么 代码示例将不胜感激 另
  • RPG 游戏循环和类结构(cocos2D for iPhone)

    我想在 iPhone 上使用 Cocos2D 制作一款 RPG 我做了相当多的研究 我真的很喜欢 Cocos2D 用于场景的模型 我可以实例化一个场景 设置我的角色等 这一切都工作得非常好 我遇到的问题是构建游戏循环并将代码与场景分开 例如
  • 如何使用 PyCharm 启动远程调试?

    我正在尝试在 PyCharm 在 Windows 主机上 和运行我的 django 应用程序的 debian 虚拟主机之间进行调试 说明显示安装 Egg 添加导入 然后调用命令 我认为这些事情需要在 debian 主机上完成 好的 那么这两
  • 如何在正则表达式中检查波斯尼亚语特定字符?

    我有这个正则表达式模式 它非常简单 它验证提供的字符串是否为 alpha 大写和小写 var pattern a zA Z gi 当我触发时pattern test Zlatan Omerovic 它返回true 但是如果我 pattern
  • 如何离线安装Notepad++插件?

    我正在尝试安装 Notepad 插件Plugins gt Plugin Manager 但我的办公室防火墙限制其下载 有没有其他方法可以离线安装插件 以下是对我有用的步骤 Download https sourceforge net pro
  • 如何从 Visual Studio 2010 调试托管 BHO

    我有一个运行良好的托管资源管理器栏 在 Internet Explorer 中工作 目前 唯一的调试方法是 在VS之外启动IE 从 VS 调试 gt 附加 附加到进程 iexplore exe 尝试执行以下操作 转到项目属性 gt 调试选项
  • 使用 Jquery 禁用锚标记

    我有一个与锚标记关联的图像 一旦用户单击该图像 就会加载弹出窗口 我想禁用这个锚标记 html 代码如下所示 a href class openModalLink img style border none width 9 alt clas
  • ionic @ionic-native/geolocation 添加提供程序问题

    Type GeolocationOriginal is not assignable to type Provider Type GeolocationOriginal is missing the following properties
  • 具有嵌套模型类的 Razor 视图

    我有一个嵌套类 例如 public class Jar public IEnumerable