在与列表相同的视图中显示模型中的单个项目

时间:2017-09-05 03:08:21

标签: asp.net-mvc razor viewmodel html-helper

我想使用此InstitutionName作为查询显示搜索结果,但不是在每行重复出现在结果表中,我只想将其显示为标题。我尝试使用DisplayFor但它总是返回一个错误,我猜是因为我的模型是IEnumerable,但我不知道,我只是暂时放入DisplayNameFor来模拟我想要显示的输出,这应该是值该物业本身,而不仅仅是物业名称。

我读过有关使用ViewModel的内容,但我只是想知道我是否可以用现在的方式完成此任务。

查看

@model IEnumerable<SMOSystemv2.Models.Tender>

@{
ViewBag.Title = "Tenders";
}

<h1>Tender History</h1>
<h2>@Html.DisplayNameFor(model => model.Compendium.Institution.InstitutionName)</h2>

<table class="table">
    <tr>
        <th nowrap>
            @Html.DisplayNameFor(model => model.Compendium.Institution.InstitutionName)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.Compendium.Qualification.Title)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.Slots)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.TotalAmount)
        </th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.Compendium.Institution.InstitutionName)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.Compendium.Qualification.Title)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.Slots)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.TotalAmount)
            </td> 

        </tr>
    }

</table>

3 个答案:

答案 0 :(得分:0)

这是我最初使用@ Model.First()建议的那种显示,但强烈推荐实现ViewModel

@model IEnumerable<SMOSystemv2.Models.Tender>

@{
    ViewBag.Title = "Tenders";
}

<h1>Tender History</h1>
<h2>@Model.First().Compendium.Institution.InstitutionName</h2>

<table class="table">
    <tr>
        <th nowrap>
            @Html.DisplayNameFor(model => model.Compendium.Qualification.Title)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.Slots)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.TotalAmount)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.Semester)
        </th>
        <th nowrap>
            @Html.DisplayNameFor(model => model.DateReceived)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.Compendium.Qualification.Title)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.Slots)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.TotalAmount)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.Semester)
            </td>
            <td nowrap>
                @Html.DisplayFor(modelItem => item.DateReceived)
            </td>

            <td nowrap>
                @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
                @Html.ActionLink("Details", "Details", new { id = item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.ID })
            </td>
        </tr>
    }

</table>

答案 1 :(得分:0)

此属性返回选择为默认

的列表或选项的第一个选项

FirstOrDefault

 @if(Model != null){
    <h2>@Model.FirstOrDefault().Compendium.Institution.InstitutionName</h2>
 }

答案 2 :(得分:0)

尝试以下解决方案:

<h2>@Html.DisplayNameFor(@Model.FirstOrDefault().Compendium.Institution.InstitutionName)</h2>

而不是

<h2>@Html.DisplayNameFor(model=>model.Compendium.Institution.InstitutionName)</h2>

因为您在代码中使用了@model IEnumerable<SMOSystemv2.Models.Tender>。属性FirstOrDefault()将为您提供列表中的第一个值作为默认值。