加载一对多模型

时间:2017-05-11 07:57:30

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

我有这样的模特:

public partial class Goods
{
    public decimal good_id { get; set; }
    public string good_name { get; set; }
    public virtual ICollection<Description> description { get; set; }
}

public partial class Description
{
    public decimal des_id { get; set; }
    public decimal des_good_id { get; set; }
    public string des_name { get; set; }
    public string des_value { get; set; }
    public virtual Goods goods { get; set; }
}

如何在商品中为每件商品的视图中加载描述模型中具有相同ID的所有数据?

我的控制器:

public ActionResult Index()
{
    var parts = _db.Goods.Include(p => p.Details);
    return View(parts.ToList());
}

这件事无效:

@foreach (var part in Model)
{
    <div class="well">
        <div class="row">
            <div class="col-xs-10">
                <h3>
                    <strong>@part.good_name</strong>
                </h3>
                <h4>
                    <strong>@part.Description</strong>
                </h4>
            </div>
        </div>
    </div>
}

3 个答案:

答案 0 :(得分:1)

我可以理解你的问题,你有模型,你的模型中也有一个列表,你想用列表检索数据

  

这是您的控制器代码

public ActionResult Index()
{
    var parts = _db.Goods.Include("Descriptions").Where(x=>x.good_id == id);
    return View(parts));
}

其中“id”是基于您的数据将被找到的ID

  

以下是使用剃刀引擎的View代码

 @import YourApplicationName.Model.Goods
 @foreach (var part in @Model.Description)
 {
 <div class="well">
    <div class="row">
        <div class="col-xs-10">
            <h3>
                <strong>@part.des_name</strong>
            </h3>
            <h4>
                <strong>@part.des_value</strong>
            </h4>
        </div>
    </div>
</div>
}
  

希望这是你的答案

答案 1 :(得分:0)

如果您使用的是Entity Framework,它会自动为每件商品加载相关的描述。您不必专门为此做任何事情。您只需使用goodsInstance.Description

即可

答案 2 :(得分:0)

首先在控制器中 - &gt; action生成数据并将其传递给模型:

public ActionResult SampleAction()
{
    using(var context = new YourContext())
    {
        return View(context.Goods.Include("description").First()); // for example    
    }          
}

之后,您必须在View中定义模型并将其放在视图的第一行:

@model Goods

然后你拥有所需的一切: 只需渲染您的数据:

<table>
    <tr>
        <td colspan="2">
            @Model.good_name 
        </td>
    </tr>
@foreach (descp in @Model.description.ToList())
{
    <tr>
        <td>
            @desc.des_name
        </td>
        <td>
            @desc.des_value
        </td>
    </tr>
}
</table>