我的网络表单中有一个嵌套转发器,我为每个转发器放了两个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做一些解释:
和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>
答案 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;