0

マスターディテールビューを作成したいと思っています。

2つのテーブルtbFamilyとtbFamilyMemberがあります。

現在、家族の詳細を表示し、関連する家族を一覧表示することはできますが、家族の役割に基づいて家族を分けたいと思います。つまり、親/保護者のリストを表示してから、生年月日順に並べられた子のリストを表示したいと思います。

私のモデルは次のとおりです。

public class tbFamily
{
    public int tbFamilyID { get; set; }
    public string Surname { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string Address3 { get; set; }
    public string Town { get; set; }
    public string County { get; set; }
    public string Postcode { get; set; }
    public string Country { get; set; }
    public string Telephone { get; set; }
    public string Mobile { get; set; }
    public string Email { get; set; }

    public virtual ICollection<tbFamilyMember> tbFamilyMember { get; set; }
    public virtual ICollection<tbFamilyData> tbFamilyData { get; set; }
}

public class tbFamilyMember
{
    public int tbFamilyMemberID { get; set; }
    public int tbFamilyID { get; set; }
    public int Role { get; set; }
    public string Firstname { get; set; }
    public string Surname { get; set; }
    public char Gender { get; set; }

    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    public DateTime DateOfBirth { get; set; }

    public virtual tbFamily tbFamily { get; set; }
}

私のコントローラーは現在次のように見えます:

    public ActionResult Details(int id = 0)
    {
        tbFamily tbfamily = db.tbFamily.Find(id);
        if (tbfamily == null)
        {
            return HttpNotFound();
        }
        return View(tbfamily);
    }

関連するビュー

@Html.DisplayFor(model => model.Surname)
@Html.DisplayFor(model => model.Address1)
@Html.DisplayFor(model => model.Address2)
@Html.DisplayFor(model => model.Address3)
@Html.DisplayFor(model => model.Town)
@Html.DisplayFor(model => model.County)
@Html.DisplayFor(model => model.Postcode)
@Html.DisplayFor(model => model.Country)
@Html.DisplayFor(model => model.Telephone)
@Html.DisplayFor(model => model.Mobile)
@Html.DisplayFor(model => model.Email)

@foreach (var item in Model.tbFamilyMember)
{
    @Html.DisplayFor(modelItem => item.Firstname)
    @Html.DisplayFor(modelItem => item.Surname)
    @Html.DisplayFor(modelItem => item.Role)
}

子供を取得するには:

public ActionResult GetChildren(int id)
{
    var tbFamilyData = from f in db.tbFamilyMember
                       where f.tbFamilyID.Equals(id)
                       where f.Role.Equals(3)
                       select f;
        return View(tbFamilyData);
}

関連するビュー:

@foreach (var item in Model.tbFamilyData)
{
    @Html.DisplayFor(modelItem => item.tbFamilyMember.Firstname)
    @Html.DisplayFor(modelItem => item.tbFamilyMember.Surname)
    @Html.DisplayFor(modelItem => item.tbFamilyMember.Role)
}

2つを一緒に機能させる方法がわからない!

別のモデルtbFamilyDataを作成しました

public class tbFamilyData
{
    public virtual tbFamily tbFamily { get; set; }
    public virtual tbFamilyMember tbFamilyMember { get; set; }
}

「tbFamilyDataにキーが定義されていません」というエラーが発生します。

誰かが助けてくれることを願っています。

4

1 に答える 1

0

次の2つのオプションのいずれかをお勧めします。

1)ビューをより適切に表すビューモデルを作成し、それらをコントローラーに入力します(私の推奨ソリューション)。

public class FamilyViewModel 
{
    public string Surname { get; set; }
    ... // other props

    public ICollection<FamilyMemberViewModel> Parents { get; set; }
    public ICollection<FamilyMemberViewModel> Children { get; set; }
}

2)ビューでLinqメソッドを使用して、表示するデータをフィルター処理します

<h1>Parents</h1>
@foreach (var item in Model.tbFamilyMember.Where(x => x.Role == Roles.Parent))
{
    ...
}

<h1>Children</h1>
@foreach (var item in Model.tbFamilyMember.Where(x => x.Role == Roles.Child)
                                          .OrderBy(x => x.DateOfBirth))
{
    ...
}
于 2012-06-21T17:15:47.547 に答える