我有一个由两部分组成的视图。第一部分是一张桌子。此表显示来自MongoDB数据库的数据,如下所示:
id| item 1 | item 2 | item 3
1 | value1 | value1 | value1 details
2 | value2 | value2 | value2 details
3 | value3 | value3 | value3 details
另一部分是一个清单。当我点击表格中其中一条记录的详细信息时,会出现一个列表,其中包含该记录的数据,如下所示:
id : 1
item 1: value1
item 2: value1
item 3: value1
这很好用。但是当我转到此页面时,我没有点击details
列表保持空白。我希望这个列表填充我的表的第一条记录的数据(不点击详细信息链接)。
此列表是动态生成的,因此我使用循环来显示项目。 所以,如果我点击详细信息:
@Html.ValueFor(x => x.LineViewItems.First(lvi => lvi.Id == Model.SelectedLineView)
.LineFieldAttributes.Single(lfa => lfa.Name == fieldName).Value);
此代码显示记录的值。但是如果没有点击details
,那么在else
部分,我想使用相同的代码,但更改:
(lvi => lvi.Id == Model.SelectedLineView)
这样的事情:
(lvi => lvi.Id == "Id of the first record")
有人可以帮我这个吗?
修改
我的if / else声明:
foreach (var fieldName in Model.LineViewAttributeNames)
{
<div class="editor-label">
@fieldName
</div>
<div class="editor-field">
@if (!string.IsNullOrEmpty(Model.SelectedLineView))
{
@Html.EditorFor(x => x.LineViewItems.First(lvi => lvi.Id == Model.SelectedLineView)
.LineFieldAttributes.Single(lfa => lfa.Name == fieldName).Value, null, fieldName, null)
}
else
{
// the code when details is not clicked.
}
</div>
}
答案 0 :(得分:1)
您可以执行以下操作,我将if
移到First
声明中。
foreach (var fieldName in Model.LineViewAttributeNames)
{
<div class="editor-label">
@fieldName
</div>
<div class="editor-field">
@{
var selectedItem = Model.LineViewItems.First(lvi => {
var selectedId = Model.SelectedLineView;
if(string.IsNullOrEmpty(Model.SelectedLineView)) // details is not clicked (SelectedLineView is not set)
{
selectedId = Model.LineViewItems.First().Id;
}
return lvi.Id == selectedId;
});
}
@Html.EditorFor(x => selectedItem.LineFieldAttributes.Single(lfa => lfa.Name == fieldName).Value, null, fieldName, null)
</div>
}