C# 加载一对多模型
我有这样的型号:C# 加载一对多模型,c#,asp.net,.net,asp.net-mvc,entity-framework,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 deci
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; }
}
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>
}
这东西坏了:
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; }
}
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>
}
@foreach(模型中的变量部分)
{
@part.好名字
@part.Description
}
如果您使用的是实体框架,它将自动为每个商品加载相关描述。你不必为此专门做任何事情。您只需在控制器->操作中首先使用goodsInstance.Description
创建数据并将其传递给模型:
public ActionResult SampleAction()
{
using(var context = new YourContext())
{
return View(context.Goods.Include("description").First()); // for example
}
}
之后,必须在视图中定义模型,并将其放在视图的第一行:
@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>
@好名字
@foreach(在@Model.description.ToList()中描述)
{
@描述名称
@描述des_值
}
我可以理解您的问题,您有一个模型,并且您的模型中有一个列表,您希望使用该列表检索数据
这是您的控制器代码
其中“id”是您的数据将被查找的基础上的id
这是您使用razor引擎的视图代码
@import YourApplicationName.Model.Goods
@foreach(var部分在@Model.Description中)
{
@part.des_name
@part.des_值
}
希望这是你的答案
您的问题是关于从数据库检索数据,但您没有显示检索此数据的代码。你能加上那个代码吗?这将是找到问题的关键。请检查我在主帖子中的编辑。我试过你说的,但没用。我做错了什么?您正在直接尝试打印集合的描述属性。您必须循环访问由“Description”表示的集合。但是无法请求进入@Model.Description,因为视图是强类型的。您应该能够循环访问其他答案中所示的描述。这很好,谢谢!但现在我有一个问题-如何不仅加载.First()?我正在尝试…但什么都没有。更改context.Goods.Include(“description”).First()到context.Goods.Include(“description”).ToList(),您将获得所有数据并将@model Goods更改为@model List等等。实际上,我在@model List之后被绊倒了,不知道下一步该怎么办。我使用字段public List goods{get;set;}创建了另一个模型,但这没有帮助。之后,在@model中有一个goods列表,您可以对其进行迭代@foreach(var g in@Model){…}在cshtml中,但这只适用于商品。现在在html中我可以这样做:@foreach(var good in@Model){@good.good_name}。你能,请,向我解释一下,如何以这种方式获得细节?