遍历 C# MVC 中的列表并访问属性

Iterate through a list in C# MVC and access properties

我创建了一个接受 ProjectsCreatorsVM 的视图 class。 class 的结构如下:

public class ProjectsCreatorsVM
{
    public List<ProjectVM> ProjectsCreators { get; set; }
    public ProjectsCreatorsVM(List<ProjectVM> projectsCreators)
    {
        ProjectsCreators = projectsCreators;
    }
}

此外,ProjectVM 遵循以下结构:

public class ProjectVM
{
    public Project Project { get; set; }
    public ApplicationUser ApplicationUser { get; set; }

    public  ProjectVM(Project pro, ApplicationUser applUser)
    {
        Project = pro;
        ApplicationUser = applUser;
    }
}

最后,我的观点试图通过ProjectsCreators.Project,但似乎不可能。

<div class="card-content-container" >
        @foreach (Project obj in @Model.ProjectsCreators.)
        {
            <div class="card">
                <img class="card-img-top" src="@obj.ImgURL"  alt ="project image" >
                <div class="card-body d-flex flex-column">
                    <h5 class="card-title">@obj.Title</h5>
                    <h6 class="card-title">@obj.Title</h6>
                    <p class="card-text">
                        @obj.TruncatedDescription
                    </p>
                    <div class="mt-auto" style="display: flex; justify-content: space-between; align-items: center;">
                        <a href="/Customer/ProjectVisitor/ViewProjectDetail?id=@obj.Id" class="btn btn-primary">View Details</a>
                    </div>
                </div>
            </div>

如有任何帮助,我将不胜感激。提前致谢。

ProjectCreators 是一个 List 并且当你迭代 ProjectCreators 你会得到一个 ProjectVM 对象不是 ProjectApplicaionUser 实例。如果您想访问 Project 实例,请在 @obj 之后添加 Project,例如 @obj.Project.Title

<div class="card-content-container" >
    @foreach (ProjectVM obj in @Model.ProjectsCreators.)
    {
        <div class="card">
            <img class="card-img-top" src="@obj.Project.ImgURL"  alt ="project image" >
            <div class="card-body d-flex flex-column">
                <h5 class="card-title">@obj.Project.Title</h5>
                <h6 class="card-title">@obj.Project.Title</h6>
                <p class="card-text">
                        @obj.Project.TruncatedDescription
                </p>
                <div class="mt-auto" style="display: flex; justify-content: space-between; align-items: center;">
                    <a href="/Customer/ProjectVisitor/ViewProjectDetail?id=@obj.Project.Id" class="btn btn-primary">View Details</a>
                </div>
            </div>
        </div>
    }
</div>

为了实现我想要的,我创建了另一个 class。看起来像这样:

 public class ProjectAndUserVM
{
    public string ProjectTitle { get; set; }
    public string ProjectId { get; set; }
    public string ProjectImageUrl { get; set; }
    public string ProjectDescription { get; set; }
    public string ProjectCreatorName { get; set; }
    public string ProjectCreatorId { get; set; }
    public string ProjectCreatorEmail { get; set; }
    public ProjectAndUserVM(string projectTitle, string projectId, string projectImageUrl, string projectDescription, string projectCreatorName, string projectCreatorId, string projectCreatorEmail)
    {
        ProjectTitle = projectTitle;
        ProjectId = projectId;
        ProjectImageUrl = projectImageUrl;
        ProjectDescription = projectDescription;
        ProjectCreatorName = projectCreatorName;
        ProjectCreatorId = projectCreatorId;
        ProjectCreatorEmail = projectCreatorEmail;
    }
}

所以,基本上我的控制器将其作为列表返回,我将其转换为 IEnumerable。而我在我的视图中使用了该列表。