Razor 从模型访问MVC5 razow视图中的子集合

Razor 从模型访问MVC5 razow视图中的子集合,razor,model-view-controller,asp.net-core-2.0,Razor,Model View Controller,Asp.net Core 2.0,我目前在尝试访问模型中的子集合时遇到问题 我的模型如下所示(请记住,我已经去掉了很多值,我的模型没有那么小): 公共类游戏 { 公共int Id{get;set;} 公共字符串标题{get;set;} 公共ICollection详细信息{get;set;} } 现在,我可以使用一个简单的linq查询轻松地获取控制器中的数据,并包含子数据(在本例中为“详细信息”) 然而,我很难看到如何访问这些数据,既可以用于发布,也可以在将其传递回视图时读取 我的观点是这样的: <dt>

我目前在尝试访问模型中的子集合时遇到问题

我的模型如下所示(请记住,我已经去掉了很多值,我的模型没有那么小):

公共类游戏
{
公共int Id{get;set;}
公共字符串标题{get;set;}
公共ICollection详细信息{get;set;}
}
现在,我可以使用一个简单的linq查询轻松地获取控制器中的数据,并包含子数据(在本例中为“详细信息”)

然而,我很难看到如何访问这些数据,既可以用于发布,也可以在将其传递回视图时读取

我的观点是这样的:

<dt>
        @Html.DisplayNameFor(model => model.Title)
    </dt>
    <dd>
        @Html.DisplayFor(model => model.Title)
    </dd>
    <dt>
        @Html.DisplayNameFor(model => model.Details)
    </dt>
    <dd>
        @Html.DisplayFor(model => model.Details)
    </dd>

@DisplayNameFor(model=>model.Title)
@DisplayFor(model=>model.Title)
@DisplayNameFor(model=>model.Details)
@DisplayFor(model=>model.Details)
但我似乎无法访问子集合中的数据

我已经试过了。但我无法访问子集合中的数据


任何帮助都将不胜感激。

使用带有列表的@for循环

@for (int i = 0; i < model.Details.Count(); i++)
{
    <dt>
        @Html.DisplayNameFor(model => model.Details[i].Title)
    </dt>
    ...
}
@for(int i=0;imodel.Details[i].Title)
...
}

最好在模型中使用列表,而不是ICollection,因此视图模型包含要显示的项目的最终列表。

使用带有列表的@for循环

@for (int i = 0; i < model.Details.Count(); i++)
{
    <dt>
        @Html.DisplayNameFor(model => model.Details[i].Title)
    </dt>
    ...
}
@for(int i=0;imodel.Details[i].Title)
...
}

最好在模型中使用列表,而不是ICollection-因此视图模型包含要显示的项目的最终列表。

我认为问题不在于使用
List
而不是
ICollection

  • 阅读:您可以使用
    @foreach
    @for()
    迭代集合中的项
  • 过帐:这是在使用
    @foreach
    HtmlHelper
    TagHelper
    在表单内生成输入时不起作用的,因为
    @foreach
    将为这些输入生成相同的ID。因此,必须将
    @for()
    与索引一起使用
我还看到您使用了
@Html.DisplayFor()
。我想你知道你在做什么
@Html.DisplayFor()
将呈现与属性类型匹配的名为
DisplayTemplates
的模板

例如,假设属性
Title
String
,如果在视图的
DisplayTemplates
文件夹中定义了名为
String.cshtml
的视图,则调用
@Html.DisplayFor(x=>x.Title)
将使用该模板为该属性呈现

String.cshtml

@model string

@if (String.IsNullOrEmpty(Model))
{
    <!-- You can render different HTML elements here -->
}
else
{
    <!-- You can render different HTML elements here -->
}

我认为问题不在于使用
List
而不是
ICollection

  • 阅读:您可以使用
    @foreach
    @for()
    迭代集合中的项
  • 过帐:这是在使用
    @foreach
    HtmlHelper
    TagHelper
    在表单内生成输入时不起作用的,因为
    @foreach
    将为这些输入生成相同的ID。因此,必须将
    @for()
    与索引一起使用
我还看到您使用了
@Html.DisplayFor()
。我想你知道你在做什么
@Html.DisplayFor()
将呈现与属性类型匹配的名为
DisplayTemplates
的模板

例如,假设属性
Title
String
,如果在视图的
DisplayTemplates
文件夹中定义了名为
String.cshtml
的视图,则调用
@Html.DisplayFor(x=>x.Title)
将使用该模板为该属性呈现

String.cshtml

@model string

@if (String.IsNullOrEmpty(Model))
{
    <!-- You can render different HTML elements here -->
}
else
{
    <!-- You can render different HTML elements here -->
}