当外键等于主键时,在视图中显示数据

时间:2013-04-15 17:15:49

标签: c# entity-framework asp.net-mvc-4 linq-to-entities

我有两个表General_Info和Quantity。 General_Info具有主键QuoteID,并且与Quantity(FK = General_InfoQuotesID)具有一对多的关系。在我的详细信息视图中,我想显示General_Info中的特定行,其中包含来自Quantity_Info的QuoteID等于General_InfoQuotesID的Quantity中的所有数据。我目前的尝试是将详细信息视图设置为显示General_Info中的指定行数据,其中包含保存数量的部分视图。我遇到的问题是,它不是显示与General_Info中给定行对应的数量,而是显示所有添加的额外数量,而不管它对应的General_Info中的行。

这是我的模型类:

public partial class General_Info
{
    public General_Info()
    {
         this.Quantities = new HashSet<Quantity>();
    }

    public int QuoteID {get; set;}
    public System.DateTime Open_Quote {get; set;}
    public string Customer_Name {get; set;}
    ...
    public virtual ICollection<Quantity> Quantities {get; set;}
}

public partial class Quantity
{
    public int QuantityID {get; set;}
    public int AdditionalQty {get; set;}
    public int General_InfoQuotesID {get; set;} //fk

    //navigation property
    public virtual General_Info General_Info {get; set;}
}

然后这是我的一些控制器:

[HttpGet]
public ActionResult Details(int id = 0)
{

    General_Info general_info = unitOfWork.General_Info_Repository.GetByID(id);
    return View(general_info);
}

[HttpGet]
[ChildActionOnly]
public ActionResult DQuantities()
{
    IEnumerable<Quantity>quantities = unitOfWork.Quantity_Repository.Get();

    // from quantities, select additionalQty when
    // General_Info.PK == Quantities.FK
    var qtys = from q in quantities
               where q.General_Info.QuoteID == q.General_InfoQuotesID
               select q.AdditionalQty;

我不认为这一行是对的,但是在尝试将linq语句直接加载到局部视图中后我试了一下

    qtys = qtys.ToList(); 

    return PartialView(qtys);
}

然后在我的DQuantities视图中(我没有包含详细信息视图,因为它已经正常工作,我认为这不是问题所在的地方)

@model IEnumerable<SourceMvc.Quantity>

<table>
  <tr>
    <th>
      Additional Quantities:
    </th>
  </tr>

非常确定这个foreach声明只是针对性 来自IEnumerable的实际表数据 这就是为什么它打印所有数量的原因 只针对我的linq声明中提取的数据

@foreach (var item in Model) {
  <tr>
    <td>
      @Html.DisplayFor(modelItem => item.AdditionalQty)
    </td>
  </tr>
}
</table>

提前感谢任何可以提供帮助的人。

1 个答案:

答案 0 :(得分:0)

好的,我有一个合适的答案。

在我的控制器中,我将DQuantities更改为:

    [HttpGet]
    [ChildActionOnly]
    public ActionResult DQuantities(int id = 0)
    {
        General_Info general_info = unitOfWork.General_Info_Repository.GetByID(id);

        IEnumerable<Quantity> getQuantities = unitOfWork.Quantity_Repository.Get();

        IEnumerable<Quantity> qtys = getQuantities.Where(q => q.General_InfoQuotesID == general_info.QuoteID);

        return PartialView(qtys);   
    }

然后在我的部分观点中:

@model IEnumerable<SourceMvc.Quantity>

<table>
  <tr>
    <th>
      @Html.DisplayNameFor(model => model.AdditionalQty)
    </th>
  </tr>

  @foreach ( var item in Model)
  {
    <tr>
      <td>
        @Html.DisplayFor(modelItem => item.AdditionalQty)
      </td>
    </tr>
  }

</table>
相关问题