如何在FormView中的Data控件中显示表的导航属性?

时间:2015-11-12 15:52:01

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

好的,我有很多这样的关系:

Walk = {WalkID, title, ...., (Navigation Properties) Features}
Feature = {FeatureID, featureName, description, (Navigation Properties) DogWalks}

我当然有一个联结表,但EF假设这样,因此它没有显示在我的edmx图中:

WalkFeatures = {WalkID, FeatureID} //junction, both FK 

因此,使用LINQ和EF,我现在尝试在Walk抓取WalkID=xx的功能。

这是我的formview

<asp:FormView ID="FormView1" runat="server" ItemType="Walks.DAL.Walk" SelectMethod="FormView1_GetItem">
    <ItemTemplate>
      <h1><%# Item.Title %></h1>
      ...
    </ItemTemplate>
 </asp:FormView
 <asp:Label ID="lbFeatures" runat="server" Text="Label"></asp:Label>

并选择方法:

public Walks.DAL.Walk FormView1_GetItem([QueryString("WalkID")] int? WalkID)
{
  using (WalkContext db = new WalkContext())
  {
   var walk = (from n in db.Walks.Include("Features")
               where n.WalkID == WalkID
               select n).SingleOrDefault();

    foreach(var f in walk.Features){
        lbFeatures.Text += f.FeatureName + "<br/>";

    }
   return walk;
  }          
}

代码运行正常,但是我可以直接在Walk.Features的{​​{1}}内显示<ItemTemplate>,而不是使用标签和循环吗?该属性是否可以像formview页面中的其他属性一样直接绑定?

1 个答案:

答案 0 :(得分:1)

我也使用过这个新功能而不是广泛但只是尝试了这个特定场景,这就是我所拥有的: -

只需从walk方法返回FormView1_GetItem,然后不要在那里操纵您的标签控件。现在,您可以使用Repeater控件来显示lbFeatures控件(因为它将动态重复),如下所示: -

<ItemTemplate>
   <h1><%# Item.Title %></h1>
   <asp:Repeater ID="lbFeatures" runat="server" DataSource='<%# Item.Features%>'>
      <ItemTemplate>
          <asp:Label ID="lblTest" runat="server" 
                     Text='<%# Eval("FeatureName") %>'></asp:Label>
          <br />
    </ItemTemplate>
  </asp:Repeater>
</ItemTemplate>

如您所见,我能够将repater控件的数据分配为Item.Features,然后使用传统方法绑定标签。这看起来干净简单:)