首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套中继器-从子中继器访问父中继器内的控件

嵌套中继器-从子中继器访问父中继器内的控件
EN

Stack Overflow用户
提问于 2011-06-04 04:28:35
回答 2查看 5.3K关注 0票数 2

我有一个页面,其中列出了几个酒店,对于每个酒店,我列出了用户选择的每个日期的价格。

我的HTML如下所示:

代码语言:javascript
复制
<table>
<asp:Repeater ID="rptrHotels" runat="server">
    <ItemTemplate>
        <tr><td><%# Eval("HotelName") %></td></tr>
        <tr>
            <asp:Repeater ID="rptrHotelRates" runat="server" DataSource='<%# GetHotelRates(Container.DataItem) %>'>
                <ItemTemplate>
                    <td>
                        <span class="date"><%# Eval("Date") %></span>
                        <span class="price">$<%# Eval("Price") %></span>
                    </td>
                </ItemTemplate>
            </asp:Repeater>
            <td>
                <span class="date">Total</span>
                <span class="price">$<asp:Literal ID="litTotal" runat="server" /></span>
            </td>
        </tr>                   
    </ItemTemplate>
</asp:Repeater>
</table>

和我的代码隐藏:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DateTime startDate = Request.QueryString["StartDate"];
        DateTime endDate = Request.QueryString["EndDate"];

        List<Hotel> hotels = GetHotels(startDate, endDate);
        rptrHotels.DataSource = hotels;
        rptrHotels.DataBind();
    }
}


protected List<Rate> GetHotelRates(object item)
{
    DateTime startDate = Request.QueryString["StartDate"];
    DateTime endDate = Request.QueryString["EndDate"];
    Hotel hotel = (Hotel)item;

    List<Rate> rates = GetRates(hotel, startDate, endDate);

    decimal total = (from r in rates
                     select r.Price).Sum();

    return rates;
}

在我的GetHotelRates()函数中,我通过将所有价格相加得到总价格。但是我需要以某种方式将这个值放在litTotal中,它在子中继器之外,但在父中继器内。

我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2011-06-04 04:42:40

在你的项目绑定事件中做一些类似这样的事情:

代码语言:javascript
复制
((Literal)((Repeater)sender).Parent.FindControl("litTotal")).Text;

你可能需要在父母身上再做一次施法,才能把它送到转播者那里,但我不确定。

票数 5
EN

Stack Overflow用户

发布于 2011-06-04 04:47:20

你总是可以尝试一些NamingContainer.Parent.Parent....FindControl (夸张的)魔法,但更简单的方法是创建一个单独的方法来获得总数:

代码语言:javascript
复制
protected decimal GetHotelTotal(object item)
{
    Hotel hotel = (Hotel)item;

    List<Rate> rates = GetRates(hotel, startDate, endDate);

    decimal total = (from r in rates
                 select r.Price).Sum();
    return total;
}

在你的文字中调用这个:

代码语言:javascript
复制
<asp:Literal ID="litTotal" runat="server" Text="<%# GetHotelTotal(Container.DataItem) %>" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6232323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档