嵌套转发器中的ItemDataBound

时间:2016-03-23 07:44:06

标签: c# asp.net entity-framework

我的网络表单中有一个嵌套转发器,我为每个转发器放了两个ObjectDataSource。

我在我的存储库中有这种方法:

 public IQueryable<TourDate> GetById(int Id)
{
    return model.TourDates.Where(e => e.TourId == Id);
}

我需要设置ItemDataBound事件。

我为ItemDataBound事件编写了这段代码:

 protected void RptTourDetail_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.AlternatingItem ||
    e.Item.ItemType == ListItemType.Item)
{
var dataItem = e.Item.DataItem;
ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
    ObjectDataSource1.SelectParameters["TourId"].DefaultValue = dataItem.TourId;
 }


}

但它在最后一行认识了TourId。我认为这有什么不妥之处

var dataItem = e.Item.DataItem;

有没有人知道这个问题是什么?

如果需要,可以对projcet做一些解释:

这是我的模特 enter image description here

和html:

<asp:ObjectDataSource ID="ODSTTitle" runat="server" SelectMethod="GetById"     TypeName="ATourRep">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="0" Name="Id"  QueryStringField="CID" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"  SelectMethod="GetById" TypeName="ATourDateRep">
        <SelectParameters>
            <asp:Parameter Name="Id" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

<div class="container" id="TourDetail">

        <asp:Repeater ID="RptTourDetail" runat="server" DataSourceID="ODSTTitle" ItemType="Tour" EnableViewState="false" OnItemDataBound="RptTourDetail_ItemDataBound">
            <HeaderTemplate>

                <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>


<img src="<%# Item.TImgUrl %>" alt="Alternate Text" class="img-responsive" />
                    <div class="row">


                        <div class="col-md-3">
                            <%-- NestedRepeater --%>
                            <p>

                                <%# Item.TourId %>

                            </p>
                            <asp:Repeater ItemType="TourDate" ID="RptTourNested" runat="server" EnableViewState="false" DataSourceID="ObjectDataSource1">
                                <ItemTemplate>
                                    <h2>

                                   <%# Item.TourStartDate %>
                                         </h2>
                                </ItemTemplate>
                            </asp:Repeater>
                        </div>


                        <div class="col-md-6">
                            <%-- This Column works correctly --%>
                            <h4>
                                <%# Item.TName %>
                            </h4>
                            <p>
                                <%# Item.TDes %>
                            </p>
                        </div>


                        <div class="col-md-3">c</div>
                    </div>

                </li>

            </ItemTemplate>

            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>

    </div>

1 个答案:

答案 0 :(得分:1)

  

变量名称与控件名称存在冲突。尝试重命名

    ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
ObjectDataSource1.SelectParameters["TourId"].DefaultValue = dataItem.TourId;
  

    ObjectDataSource objTourDataSource= (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
objTourDataSource.SelectParameters["TourId"].DefaultValue = dataItem.TourId;