簡體   English   中英

如何在轉發器中切換控件的可見性?

[英]How do I switch visibility of a control in a repeater?

我有一個購物車,我正在開發作為Web用戶控件。 ucCart.ascx將出現在三個不同的頁面上,我希望購物車的功能可以根據它出現的頁面而改變。 例如,當客戶確認他們的訂單時,我不希望刪除購物車項目按鈕或重新計算購物車按鈕可見。

這可以在代碼后面以編程方式完成嗎? 我寧願不使用JavaScript。 我天真地嘗試使用cartDelete.Visible = false; 但那根本不受歡迎!

您需要獲得對這些控件的引用,並將set Visible屬性調用為false; 像這個偽代碼;

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

請參閱此文檔

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

假設您有這樣的轉發器(請注意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;
    }
}

它會產生這個: 樣品運行

作為參考,我用來填充我的轉發器的代碼是這樣的:

 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();

我認為你可以在這個名為“hide controls”的用戶控件中創建一個公共函數,並在你想要的頁面中調用這個函數,這個函數隱藏控件,或者你可以在用戶控件中創建一個布爾屬性,頁面可以將它設置為false,然后您可以使用此標志來隱藏usercontrol中的控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM