ASP.net MVC DisplayNameFor视图中的嵌套模型

时间:2012-11-20 15:40:43

标签: asp.net-mvc model controller

我在ASP.net MVC项目中有一个视图,它与控制器(SubmissionController)和类(Submission)相关联。

在视图中,我使用以下方法显示类中的一些值:

@Html.DisplayFor(Function(model) model.Created)

这很有效,但我现在想要达到的目的是能够获得嵌套在我上面引用的模型中的Collection的显示名称。

更清楚;我正在查看视图中的许多提交的单个提交(使用SubmissionController的Details函数)。每个提交都有很多照片,我想在提交详细信息视图中显示这些照片以及提交详细信息。

要显示照片,我可以使用以下代码创建照片表...

            <tbody>
            @For Each item In Model.Photos
                Dim currentItem = item
                @<tr>
                    <td>
                        @Html.DisplayFor(Function(modelItem) currentItem.Photo_ID)
                    </td>
                    <td>
                        @Html.DisplayFor(Function(modelItem) currentItem.Photo_Status1.Value)
                    </td>
                    <td>
                        @Html.DisplayFor(Function(modelItem) currentItem.Photo_Size)
                    </td>
                    <td>
                        @Html.DisplayFor(Function(modelItem) currentItem.Photo_Taken)
                    </td>
                </tr>
            Next
        </tbody>

虽然未经测试,但我相信上面的代码应该可以正常工作。

考虑到这一点,我如何获得Photo字段/属性的DisplayNameFor值?

这显然不起作用!

@Html.DisplayNameFor(Function(model) model.Photos.Photo_Size)

顺便说一下,我不想手动写入标题名称,它们必须来自模型。

答案

DigitalD的回答几乎就在那里,这是解决方案。

@Dim photoModel = New Photo()
@Html.DisplayNameFor(Function(photoModelx) photoModel.Photo_ID)

2 个答案:

答案 0 :(得分:1)

@Html.DisplayNameFor(Function(model) model.Photos.Photo_Size)无效,因为model.Photos可能是IEnumerable且没有Photo_Size属性。你可能会传递一个像这样的空模型项目:

@Dim displayModel = new Photo()
@Html.DisplayNameFor(Function(displayModel) displayModel.Photo_Size)

答案 1 :(得分:0)

如果我理解正确,您正在尝试获取您正在显示的字段的名称(“拍摄照片”,“照片尺寸”等)?如果是这种情况,我建议使用DataAnnotations和LabelFor(item =&gt; item.Field)。这将为您提供我相信的内容。