如何在转发器中切换控件的可见性?

时间:2011-08-03 14:45:14

标签: c# asp.net repeater

我有一个购物车,我正在开发作为Web用户控件。 ucCart.ascx将出现在三个不同的页面上,我希望购物车的功能可以根据它出现的页面而改变。例如,当客户确认订单时,我不希望删除购物车项目按钮或重新计算购物车按钮。

这可以在代码后面以编程方式完成吗?我宁愿不使用JavaScript。我天真地尝试使用cartDelete.Visible = false;,但这根本不受欢迎!

2 个答案:

答案 0 :(得分:8)

您需要获取对这些控件的引用,并将set Visible属性调用为false;像这个伪代码;

ShoppingCartControlVariable.FinControl( “idOfTheControlYouWantToHide”)可见=假。

See this documentation

添加示例代码以演示如何完成此操作:

假设您有这样的转发器(请注意OnItemCreated处理程序):

 <asp:Repeater ID="myrepeater" runat="server" OnItemCreated="myrepeater_ItemCreated">
        <HeaderTemplate>
            <table>
                <thead>
                    <th>
                        Link
                    </th>
                    <th>
                        Button
                    </th>
                </thead>
                <tbody>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <asp:HyperLink ID="link" runat="server" Text='<%#Eval("Text")%>' NavigateUrl='<%#Eval("Url")%>'></asp:HyperLink>
                </td>
                <td>
                    <asp:Button ID="btnDelete" runat="server" Text="Delete" />
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </tbody> </table>
        </FooterTemplate>
    </asp:Repeater>

您可以隐藏/显示转发器行中的元素,如下所示:

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item && (boolean_condition_that_on_which_you_will_decide_what_to_show_and_what_to_hide))
    {
        e.Item.FindControl("link").Visible = false;
    }
}

例如,如果我想隐藏每一行上的所有链接元素并只留下删除按钮,我可以这样做:

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item  || e.Item.ItemType==ListItemType.AlternatingItem)
    {
        e.Item.FindControl("btnDelete").Visible = false;
    }
}

它会产生这个: sample run

作为参考,我用来填充转发器的代码是:

 List<CartItem> items = new List<CartItem>();
        for (int i = 0; i < 10; i++)
        {
            CartItem t = new CartItem();
            t.Text="Item " +i;
            t.Url="http://www."+i+".com";
            items.Add(t);
        }
        myrepeater.DataSource = items;
        myrepeater.DataBind();

答案 1 :(得分:0)

我认为你可以在这个名为“hide controls”的用户控件中创建一个公共函数,并在你想要的页面中调用这个函数,这个函数隐藏控件,或者你可以在用户控件中创建一个布尔属性,页面可以将其设置为false,然后您可以使用此标志来隐藏usercontrol中的控件。