好的,我有很多这样的关系:
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
页面中的其他属性一样直接绑定?
答案 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
,然后使用传统方法绑定标签。这看起来干净简单:)