从ASP.NET MVC中访问子级的父模型数据

时间:2016-01-24 19:38:19

标签: c# asp.net-mvc entity-framework parent

我正在使用ASP.NET MVC C#构建小型Web应用程序。我有两个模型:

public class Parent
{
    public Guid Id { get; set; }

    public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
    public Guid Id { get; set; }

    public Guid ParentId{ get; set; }
    public virtual Parent Parent { get; set; }
}

我有ParentView,我使用ActionLink将Parent Id发送到Child Controller,如下所示:

@Html.ActionLink("something", "ChildIndexMethod", "ChildController", new { parentId=item.Id}, null)

单击时,我们转到ChildIndexView并显示父模型下的所有子项列表。从那里,我想要的是能够在同一个Parent下创建新的Child。要创建新的Child,我需要为新的Child对象提供ParentId。如何检索ParentId并将其传递给Child?

我这样做了:

if (Model.FirstOrDefault() != null) 
    { 
        @Html.ActionLink("New child", "NewChild", new { parentId = Model.FirstOrDefault().ParentId})
    }
    else
    {
        //What to do if Model is null?
    }

首先,我检查Model是否为null。如果它不为null,我从模型中获取FirstOrDefault对象并将ParentId传递给Child。但它只有在已经有父母的孩子的情况下才有效。如果Parent下没有Children,我无法读取ParentId,从而发生错误。如何从这个位置向父元素发送ParentId?

我知道这可能是实现目标的错误方法。但我还在学习。另外,我无法在SO上找到答案。任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

看来儿童视图中的模型是IEnumerable<Child>。您有两种选择:

定义一个新的viewmodel,其中包含Child和parentid的列表:

public ChildListViewModel
{
    public Guid ParentId {...}
    public IEnumerable <Child> Children {...}
}

使用查看包

ViewBag.ParentId = parentId;

即使您没有任何Child

,两者都会在您的视图中提供ParentId