我目前在尝试访问模型中的子集合时遇到问题。
我的模型如下所示(请记住我已经删除了很多值,我的模型不是那么小):
public class Games
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<GameDetails> Details { get; set; }
}
现在,我可以使用简单的linq查询轻松获取控制器中的数据,并包含子数据(在本例中为&#39;详细信息&#39;)。
然而,我很难看到我如何能够发布这些数据以及在传回我的视图时阅读它。
我的观点如下:
<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>
但似乎我无法访问子集合中的数据。
我试过过model.Details。但我无法访问子集合中的数据。
非常感谢任何帮助。
答案 0 :(得分:1)
使用带有列表的@for循环
@for (int i = 0; i < model.Details.Count(); i++)
{
<dt>
@Html.DisplayNameFor(model => model.Details[i].Title)
</dt>
...
}
最好在模型中使用List,而不是ICollection - 因此视图模型包含要显示的项目的确定列表。
答案 1 :(得分:1)
我认为问题不在于使用double[][] inputs = sourceMatrix.GetColumns(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }).ToJagged();
而不是List
。
ICollection
或@foreach
来迭代集合中的项目。@for()
与@foreach
或HtmlHelper
生成表单内的输入将无效,因为TagHelper
将为这些输入生成相同的ID。因此,您必须使用带有索引的@foreach
。我也看到你使用了@for()
。我假设你知道你在做什么。 @Html.DisplayFor()
将呈现与属性类型匹配的名为@Html.DisplayFor()
的模板。
例如,假设属性DisplayTemplates
是Title
,如果您在视图的String
文件夹中定义了名为String.cshtml
的视图,则调用DisplayTemplates
将使用该模板为该属性进行渲染。
<强> String.cshtml 强>
@Html.DisplayFor(x => x.Title)
我通常不使用@model string
@if (String.IsNullOrEmpty(Model))
{
<!-- You can render different HTML elements here -->
}
else
{
<!-- You can render different HTML elements here -->
}
来构建表单元素。相反,我只会使用特定的HTML帮助程序或标记帮助程序来构建特定的输入类型。例如,要构建文本框,请使用@Html.DisplayFor()
或@Html.TextBoxFor()
。要构建文本区域,请使用<input type="text" asp-for="xxx" />
或@Html.TextAreaFor()
。
我只想显式声明/定义输入元素。
使用标记帮助程序的示例表单(手写,未经测试):
<textarea asp-for="xxx"></textarea>