如何在视图中显示第二个模型的数据?

时间:2016-07-27 23:17:17

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

我正在尝试建立一个狗的血统网站,我正试图找出如何在狗的详细信息页面上显示父母,后代等的数据。

@model DogPedigree.Entities.Dog

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>Dog</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.AKCRegNumber)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.AKCRegNumber)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.name)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.name)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.sex)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.sex)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.breed)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.breed)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.birthday)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.birthday)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.sirenumber)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.sirenumber)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.damnumber)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.damnumber)
        </dd>

    </dl>
</div>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.AKCRegNumber }) |
    @Html.ActionLink("Back to List", "Index")
</p>

所以model.AKCRegNumber是我的主键,sirenumber是父亲的AKCRegNumber,而damnumber是母亲的AKCRegNumber。有关如何从父行中提取一些数据的任何提示,例如可能将名称显示为父级详细信息页面的链接?感谢

2 个答案:

答案 0 :(得分:1)

您需要一个范围更广的模型:

using DogPedigree.Entities

public class DogModel
{
    public Dog CurrentDog { get; set; }
    public Dog FatherDog { get; set; }
    public Dog MotherDog { get; set; }
    // other properties you need...
}

在将DogModel发送到View之前,使用您需要的任何数据(例如从数据库中)填充您的DogModel。

您还可以为此模型添加Title的属性...

public string Title { get; set; }

...而不是从ViewBag设置和检索。

简而言之:根据需要创建模型,用相关数据填充,然后传递给View。

答案 1 :(得分:0)

所以我在DogsController中添加了一个新方法:

public async Task<IActionResult> Pedigree(int id)
    {
        var dog = await _context.Dogs.SingleOrDefaultAsync(m => m.ID == id);
        var dam = await _context.Dogs.SingleOrDefaultAsync(m => m.Name == dog.Dam);
        var sire = await _context.Dogs.SingleOrDefaultAsync(m => m.Name == dog.Sire);
        var damDam = await _context.Dogs.SingleOrDefaultAsync(m => m.Name == dam.Dam);
        var damSire = await _context.Dogs.SingleOrDefaultAsync(m => m.Name == dam.Sire);
        var sireDam = await _context.Dogs.SingleOrDefaultAsync(m => m.Name == sire.Dam);
        var sireSire = await _context.Dogs.SingleOrDefaultAsync(m => m.Name == sire.Sire);
        Dogs[] dogs = new Dogs[7] { dog, dam, sire, damDam, damSire, sireDam, sireSire };
        return View(dogs.ToList());
    }

它很棒。我想知道这是否符合MVC最佳实践?