使用嵌套转发器的ASP.NET Repeater控件

时间:2012-01-04 16:10:37

标签: asp.net data-binding repeater

我有一个嵌套的转发器控件。这是HTML的样子:

<ItemTemplate>
    <div class="boxLeft">
        <h4><%# DataBinder.Eval(Container.DataItem, "DisciplineName") %></h4><asp:Label runat="server" ID="lblDisciplineID" Visible="false" Text='<%# DataBinder.Eval(Container.DataItem, "DisciplineID") %>'></asp:Label>
        <p><%# DataBinder.Eval(Container.DataItem, "DisciplineNarrative") %></p>
        <h5 class="articles"><%# DataBinder.Eval(Container.DataItem, "InstructorCount")%> instructors</h5>
        <ul>
            <asp:Repeater runat="server" ID="rptRegions">
                <ItemTemplate>
                    <li><a href='/Lessons/<%# DataBinder.Eval(Container.DataItem, "DisciplineName") %>/<%# DataBinder.Eval(Container.DataItem, "CityName") %>'><%# DataBinder.Eval(Container.DataItem, "CityName") %></a></li>
                </ItemTemplate>
            </asp:Repeater>
        </ul>
    </div>
</ItemTemplate>

如您所见,我想在子转发器中访问父转发器的父DisciplineName属性,以构建URL。我收到以下错误:

  

DataBinding:'GolfLessonSearch.Model.CityEntity'不包含   名为'DisciplineName'的属性。

这是因为它试图从子转发器获取“DisciplineName”但我希望它来自父转发器。我认为属性可能仍然在范围内,但似乎没有。有没有办法得到这个?

1 个答案:

答案 0 :(得分:4)

如果您在DataItems后面的对象与您在转发器中表示它们时具有相同的父/子关系,则您始终可以完全限定属性名称,以便您的子转发器正在调用

DataBinder.Eval(Container.DataItem, "Parent.DisciplineName")

如果不是这种情况,我的直觉就是创建一个ViewModel对象(尽管它不是mvc)你的子对象假冒这种关系......

修改

请注意,当我说“Parent.DisciplineName”时,我的意思是用对象名称替换“Parent”...(我只符合条件,因为“Parent”是asp中许多其他地方的保留字。网...