[英]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.